
Mysql半同步和过滤复制
主从数据一致性问题
1.半同步复制工作原理的变化
- 1、 主库执行新的事务,commit时,更新 show master status\G ,触发一个信号给
- 2、 binlog dump 接收到主库的 show master status\G信息,通知从库日志更新了
- 3、 从库IO线程请求新的二进制日志事件
- 4、 主库会通过dump线程传送新的日志事件,给从库IO线程
- 5、 从库IO线程接收到binlog日志,当日志写入到磁盘上的relaylog文件时,给主库ACK_receiver线程
- 6、 ACK_receiver线程触发一个事件,告诉主库commit可以成功了
- 7、 如果ACK达到了我们预设值的超时时间,半同步复制会切换为原始的异步复制.
2.配置半同步复制
加载插件
主:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
从:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查看是否加载成功:
show plugins;
启动:
主:
SET GLOBAL rpl_semi_sync_master_enabled = 1;
从:
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
重启从库上的IO线程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
查看是否在运行
主:
show status like 'Rpl_semi_sync_master_status';
从:
show status like 'Rpl_semi_sync_slave_status';
3.过滤复制
3.1主库过滤
Binlog_Do_DB
Binlog_Ignore_DB
3.2从库过滤
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: