1)、什么是MySQL主从复制
MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个MySQL数据库从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库。
2)、MySQL主从复制作用
一、数据热备
作为备数据库,当主数据库服务器发生故障后,可切换到从数据库继续工作,避免数据丢失。
二、读写分离
可支持MySQL数据库服务器支持更大的并发。数据读写操作可分配在不同的服务器间进行。如操作报表中尤其重要,由于部分报表SQL语句非常的慢,会导致锁表,影响前台服务。使用主从复制,前台使用master,负责写,报表使用slave,负责读,那么报表SQL将不会造成前台锁表,保证了前台正常运行。
三、架构扩展
随着业务量越来越大,I/O访问频率过高,单机可能无法满足。此时做多库的存储,如一主多从方式,以降低磁盘I/O访问,提高单个机器的I/O性能。
MySQL数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master节点,数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
总结如下:
1)、master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master上创建授权的用户,开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。
2)、slave开启两个线程:IO线程和SQL线程。IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
3)、Mysql主从复制至少需要两个Mysql服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个MySQL服务。
4)、Mysql主从复制最好确保master和slave服务器上的Mysql版本相同。
常见的主从形式:
一主一从
一主两从、一主多从
联级复制
OS:CentOS7
主从形式:一主一从
实现MySQL主从复制需要进行的配置:
主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号
从服务器:
配置唯一的server-id
使用master分配的用户账号读取master二进制日志
启用slave服务
具体操作:
主服务器操作
1)、修改主数据库服务器配置文件my.cnf
server_id = 1 #唯一标识,主库从库不能重复
log_bin = mysql-bin #开启日志
binlog_format=MIXED #日志记录的格式
max_binlog_size = 512M #单个日志文件最大
expire_logs_day = 3 #日志有效期(天)
binlog_do_db = test1,test2 #日志记录那些数据库
binlog_ignore_db = mysql,performance_schema,information_schema #日志记录忽略那些数据库
2)、创建用于同步账户
mysql> CREATE USER ‘user‘@‘10.10.10.11‘ IDENTIFIED BY ‘passwd‘; #创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘user‘@‘10.10.10.11‘; #分配权限,只能10.10.10.11从服务器连接
mysql>flush privileges;
3)、查看master状态
show master status命令记录二进制文件名(mysql-bin.000003)和position位置(77)。
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 77 | test | manual,mysql |
+------------------+----------+--------------+------------------+
从服务器操作
1)、修改从数据库服务器配置文件my.cnf
server_id = 2
log_bin = mysql-bin #开启日志
binlog_format=MIXED #日志记录的格式
max_binlog_size = 512M #单个日志文件最大
expire_logs_day = 3 #日志有效期(天)
replicate_do_db = test1,test2 #slave上配置,指定slave要复制哪个库
replicate-ignore-db=mysql,performance_schema,information_schema #slave上配置,指定slave要忽略哪些库
relay_log_recovery = 1 #从库建议开启,有利于数据一致性
log_slave_updates = 1 #如果从库还会用做主库,建议开启
2)、设置同步信息
先停止同步
mysql>stop slave;
设置同步信息
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘10.10.10.10‘,
-> MASTER_USER=‘user‘,
-> MASTER_PASSWORD=‘passwd‘,
-> MASTER_LOG_FILE=‘mysql-bin.000003‘,
-> MASTER_LOG_POS=77;
其中master_log_file 和 master_log_pos为上面主库show master status命令记录的信息。
3)、启动slave 同步进程
mysql>start slave;
4)、slave状态查看
show slave status\G 命令查看,主要查看这几项:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_Log_File: mysql-bin.000003
Relay_Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 2720
Exec_master_log_pos: 2720
Slave_IO_Running和Slave_SQL_Running都为YES,表示主从同步设置成功了。
验证操作,如在master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据,即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可完成MySQL主从复制功能的验证了。
原文地址:https://blog.51cto.com/10874766/2468557
时间: 2024-11-05 17:25:30