MySQL 半同步复制
时间:2019-08-23 16:36 来源:linux.it.net.cn 作者:IT
在主库初次启动时,执行如下语句加载semisync_master插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
备库上则加载semisync_slave插件:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
在初次加载插件后,MySQL会将该插件记录到系统表mysql.plugin中,下次启动时系统则会自动加载该插件了,无需再次执行上面的命令。
另外,主备库的配置文件my.cnf还需要新增如下记录来打开semi-sync。主库上,新增如下参数:
$vi my.cnf
...
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
...
备库上新增:
$vi my.cnf
...
rpl_semi_sync_slave_enabled=1
...
那么主备在启动后,且slave线程开始dump主库的日志后,Semi-sync Replication就会开启,上面的配置(rpl_semi_sync_master_timeout=1000)表示主库在某次事务中,如果等待时间超过1000毫秒,那么则降级为普通模式,不再等待备库。如果主库再次探测到,备库恢复了,则会自动再次回到Semi-sync状态。
3. 其他参数
Semi-sync的配置参数不多,按照上面配置就可以了,其他少数几个参数默认即可。
主库上的其他参数:
mysql> show variables like "%rpl_semi%"; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 1000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | ON | +------------------------------------+-------+
备库上有:
mysql> show variables like "%rpl_semi%"; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_wait_no_slave | ON | | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +------------------------------------+-------+
root@localhost >show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 | 有多少个Semi-sync的备库
| Rpl_semi_sync_master_net_avg_wait_time | 0 | 事务提交后,等待备库响应的平均时间
| Rpl_semi_sync_master_net_wait_time | 0 | 等待网络响应的总次数
| Rpl_semi_sync_master_net_waits | 7 | 总的网络等待时间
| Rpl_semi_sync_master_no_times | 0 | 一共有几次从Semi-sync跌回普通状态
| Rpl_semi_sync_master_no_tx | 0 | 库未及时响应的事务数,如果这个值很大就有问题
| Rpl_semi_sync_master_status | ON | 主库上Semi-sync是否正常开启
| Rpl_semi_sync_master_timefunc_failures | 0 | 时间函数未正常工作的次数
| Rpl_semi_sync_master_tx_avg_wait_time | 410 | 开启Semi-sync,事务返回需要等待的平均时间
| Rpl_semi_sync_master_tx_wait_time | 2876 | 事务等待备库响应的总时间
| Rpl_semi_sync_master_tx_waits | 7 | 事务等待备库响应的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 | 改变当前等待最小二进制日志的次数
| Rpl_semi_sync_master_wait_sessions | 0 | 当前有几个线程在等备库响应
| Rpl_semi_sync_master_yes_tx | 7 | Semi-sync模式下,成功的事务数
---------------------
(责任编辑:IT)
在主库初次启动时,执行如下语句加载semisync_master插件: mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 备库上则加载semisync_slave插件: mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 在初次加载插件后,MySQL会将该插件记录到系统表mysql.plugin中,下次启动时系统则会自动加载该插件了,无需再次执行上面的命令。 另外,主备库的配置文件my.cnf还需要新增如下记录来打开semi-sync。主库上,新增如下参数: $vi my.cnf ... rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 ... 备库上新增: $vi my.cnf ... rpl_semi_sync_slave_enabled=1 ... 那么主备在启动后,且slave线程开始dump主库的日志后,Semi-sync Replication就会开启,上面的配置(rpl_semi_sync_master_timeout=1000)表示主库在某次事务中,如果等待时间超过1000毫秒,那么则降级为普通模式,不再等待备库。如果主库再次探测到,备库恢复了,则会自动再次回到Semi-sync状态。 3. 其他参数 Semi-sync的配置参数不多,按照上面配置就可以了,其他少数几个参数默认即可。 主库上的其他参数: mysql> show variables like "%rpl_semi%"; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 1000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | ON | +------------------------------------+-------+ 备库上有: mysql> show variables like "%rpl_semi%"; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_wait_no_slave | ON | | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +------------------------------------+-------+ root@localhost >show global status like '%semi%'; +--------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------+-------+ | Rpl_semi_sync_master_clients | 1 | 有多少个Semi-sync的备库 | Rpl_semi_sync_master_net_avg_wait_time | 0 | 事务提交后,等待备库响应的平均时间 | Rpl_semi_sync_master_net_wait_time | 0 | 等待网络响应的总次数 | Rpl_semi_sync_master_net_waits | 7 | 总的网络等待时间 | Rpl_semi_sync_master_no_times | 0 | 一共有几次从Semi-sync跌回普通状态 | Rpl_semi_sync_master_no_tx | 0 | 库未及时响应的事务数,如果这个值很大就有问题 | Rpl_semi_sync_master_status | ON | 主库上Semi-sync是否正常开启 | Rpl_semi_sync_master_timefunc_failures | 0 | 时间函数未正常工作的次数 | Rpl_semi_sync_master_tx_avg_wait_time | 410 | 开启Semi-sync,事务返回需要等待的平均时间 | Rpl_semi_sync_master_tx_wait_time | 2876 | 事务等待备库响应的总时间 | Rpl_semi_sync_master_tx_waits | 7 | 事务等待备库响应的总次数 | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | 改变当前等待最小二进制日志的次数 | Rpl_semi_sync_master_wait_sessions | 0 | 当前有几个线程在等备库响应 | Rpl_semi_sync_master_yes_tx | 7 | Semi-sync模式下,成功的事务数 --------------------- (责任编辑:IT) |