简单介绍:
一主一从:
1.主库会将所有的更新记录保存到 Binarylog 文件。
2.每当有从库连接到主库的时候,主库都会创建一个 log dump 线程发送 Binarylog 文件到从库。
3.当从库复制开始的时候,从库就会创建两个线程进行处理,一个 I/O 线程,一个 SQL 线程。
4.I/O 线程去请求主库的 Binarylog文件,并将得到的 Binarylog 文件写到 Relaylog 文件中。
5.SQL 线程会读取 Relaylog 文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
问题:复制在slave上是串行的,所以在master上的并行更新操作不能在slave上并行操作.这也是导致主从复制延迟的一个重要因素.
MySQL5.7以后开始支持slave的并行复制.
实现步骤:
环境
master主库ip地址:172.17.0.2 端口号:3306
slave从库ip地址:172.17.0.3 端口号: 3307
配置master主库服务器
修改my.cnf
server-id=101 #服务器唯一ID,默认是1
log-bin=mysql-bin #主库必须启用二进制日志
【非必须】
binlog-do-db=demo #需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可binlog-ignore-db=mysql #不需要备份的数据库名,
创建复制账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
配置slave主库服务器
修改my.cnf
server-id=102 #配置server-id,让从服务器有唯一ID
relay_log = mysql-relay-bin #打开Mysql中继日志
【非必须】
read_only = 1 #设置只读权限
log-bin = mysql-slave-bin #开启从服务器二进制日志(一主一从时从库可以不启)
log_slave_updates = 1 #使得更新的数据写进二进制日志中(一主一从时从库可以不开启)
从库进行changemaster设置-主库的logfile名称和position位置点等信息
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos= 1658, master_connect_retry=30;