msyql主从同步

主从同步原理图:

msyql主从同步_第1张图片

 

注: 5.6.3前,只有一个I/O线程,5.6.3之后,有多个I/O线程去读,效率更高

原理:

步骤1: 主从同步后,主服务其会把所有DDL和DML操作写到binlog日志中, 由于是顺序写,所以效率很高

步骤2: 从服务器的I/O线程读取主服务器的binlog日志, 并写到从服务器的relay log中

步骤3: 从服务器会依次执行relay log中的sql语句,进行数据同步

ps: DDL: 数据定义语言, create、drop、alter等

DML: 数据操纵语句, insert、delete、udpate、select 等

 

常见问题:

主从同步延迟

原因:

1. 当主库的并发较高时,产生binlog速度超过从库的SQL Thread所能处理的速度

2. 从库有某个SQL执行的时间稍长,或产生了锁等待,导致延迟

3. 从服务器配置低于主服务器,导致处理效率低于主服务器,导致延迟

解决:

1. 为保证数据安全性,mysql默认配置sync_binlog=1,innodb_flush_log_at_trx_commit = 1 等设置,从服务器可以关闭binlog,innodb_flush_log_at_trx_commit也可以设置为0来提高sql的执行效率

2. 从服务器的配置与主服务器相同或更高

3. 增加从服务器,减少从服务器负载

4. mysql5.6, 新功能基于库的并行复制,设置slave_parallel_workers = 4(>1),即可有4个SQL Thread(coordinator线程)来进行并行复制

5. 开启MySQL 5.7 的新功能基于组的并行复制, 设置参数slave_parallel_workers>0并且global.slave_parallel_type=‘LOGICAL_CLOCK’

 

推荐: 浮生无事的博客

 

你可能感兴趣的:(msyql)