mysql主从(半同步及增强半同步)
(2019-01-21 17:50:50)分类: mysql主从及监控 |
半同步复制特点
MySQL5.5开始推出半同步复制
半同步复制:至少有一个Slave节点收到binlog后再返回(IO线程接收到即可) 特点: 1.减少数据丢失风险 2.不能完全避免数据丢失 3.超时后,切换回异步复制(配置半同步复制需要先配置异步复制) |
主从原理解析:
1.mysql5.6主从原理解析:
参数:AFTER_COMMIT(5.6默认值) master将每个事务写入binlog
,传递到slave 即主库commit时,先保证了binlog日志写入了从库中继日志后主库才提交binlog落盘OK给客户端.此方法影响了主库性能. 2.mysql5.7主从原理解析: master 设置半同步模式: |
半同步复制过程:
启动半同步之前需配好异步主从.异步主从配好后再通过安装插件,设置参数,重启IO线程启动半同步复制.
1.主库和从库都需要安装插件主库: 从库: 主库从库分别查看插件是否加载成功: mysql> show plugins; 在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步. 2.启动半同步复制设置参数启动: 主库: 从库: 以上的启动方式是在命令行操作,也可写在配置文件中。 在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制 [mysqld] plugin_dir=/usr/local/mysql/lib/plugin plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" rpl_semi_sync_master_enabled=1 rpl_semi_sync_slave_enabled=1 rpl_semi_sync_master_timeout=1000 rpl_semi_sync_master_wait_for_slave_count=1 重启从库的IO线程: STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; 如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。这时候,主的error.log中会打印如下信息: 2017-04-19 11:09:26 28300 [Note] Semi-sync replication switched ON with slave (server_id: 28703307) at (mysql-bin.000002, 510) 2017-04-19 11:09:26 28300 [Note] Start semi-sync binlog_dump to slave (server_id: 28703307), pos(mysql-bin.000002, 510) 2017-04-19 11:09:26 28300 [Note] Stop asynchronous binlog_dump to slave (server_id: 28703307) 3.查看半同步复制查看半同步是否在运行: 主库执行: mysql> show status like 'Rpl_semi_sync_master_status'; 从库执行: mysql> show status like 'Rpl_semi_sync_slave_status'; 这两个变量常用来监控主从是否运行在半同步复制模式下。 主库执行:mysql> Rpl_semi_sync_master_status:指示主服务器使用的是异步复制模式,还是半同步复制模式。 Rpl_semi_sync_master_clients:显示有多少个从服务器配置成了半同步复制模式。 Rpl_semi_sync_master_yes_tx:显示从服务器确认的成功提交数量。 Rpl_semi_sync_master_no_tx:显示从服务器确认的不成功提交数量。 |
mysql 5.7增强半同步(无损复制)配置文件
同步复制:必须等从库回放了中继日志里对应的信息,主库才返回commit
ok信号.
plugin_dir=/usr/local/mysql/lib/plugin plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" loose_rpl_semi_sync_master_enabled = 1 --loose表示若上面参数失效,则下面参数失效. loose_rpl_semi_sync_slave_enabled = 1 loose_rpl_semi_sync_master_timeout
= 5000 rpl_semi_sync_master_wait_point = AFTER_SYNC rpl_semi_sync_master_wait_for_slave_count = 1 --有1台返回确认结果主库就commit ok 1. 2. |