linux之mysql57半同步复制(降低数据丢失的概率)
1 主服务器配置
select @@have_dynamic_loading; 查看是否有动态的安装
show plugins; 查看插件 时是否有 rpl_semi_sync_master插件
install plugin rpl_semi_sync_master soname 'semisync_master.so'; 安装semi插件
show variables like '%rpl_semi_sync%'; 查看设置
2 配置vim /etc/my.cnf
rpl_semi_sync_master_enabled=1;
rpl_semi_sync_master_timeout=2000
rpl_semi_sync_master_enabled控制是否在主服务器上启用半同步复制。要启用或禁用插件,请将此变量分别设置为1或0。默认值为0(关闭)。
rpl_semi_sync_master_timeout以毫秒为单位的值,用于控制主机在超时并恢复为异步复制之前,等待提交等待从属服务器进行确认的时间。默认值为10000(10秒)。
可动态设置
set global rpl_semi_sync_master_enabled=1; 开启semi
set global rpl_semi_sync_master_timeout=2000; 超时复制
systemctl restart mysqld 重启mysql
3 从服务器配置
select @@have_dynamic_loading; 查看是否有动态的安装
show plugins; 查看插件 时是否有 rpl_semi_sync_master插件
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';安装semi插件
show variables like '%rpl_semi_sync%'; 查看设置
4 配置vim /etc/my.cnf
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_slave_enabled与相似 rpl_semi_sync_master_enabled,但控制从属插件。
可动态配置
set global rpl_semi_sync_slave_enabled=1;开启semi
systemctl restart mysqld 重启mysql
注意;如果已经在运行,则先将其停止
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
5 在主主服务器查看日志 semi是否生效
cat var/log/mysqld.log
6 使用状态变量可以监视半同步复制的操作
show status like 'rpl_semi_sync%';
7 在从服务器 延迟复制 从服务器故意落后于主服务器至少指定的时间。默认延迟为0秒。
stop slave;
CHANGE MASTER TO MASTER_DELAY = 1; 设置为N秒
start slave;
8 延迟复制可用于多种目的:
(1)防止主机上的用户错误。DBA可以将延迟的从属服务器回滚到灾难发生前的时间。
(2)测试出现延迟时系统的行为。例如,在一个应用程序中,延迟可能是由于从站上的负载过重引起的。但是,可能很难生成此负载级别。延迟复制可以模拟延迟,而不必模拟负载。它还可以用于调试与滞后从站有关的条件。
(3)无需重新加载备份即可检查数据库的外观。例如,如果延迟是一周,并且DBA需要在开发最后几天之前查看数据库的外观,则可以检查延迟的从属服务器。
START SLAVE并 STOP SLAVE立即生效,而忽略任何延迟。RESET SLAVE 将延迟重置为0。
9 show slave status \G; 有三个字段可提供有关延迟的信息:
SQL_Delay:一个非负整数,指示从站必须落后于主站的秒数。
SQL_Remaining_Delay:当 Slave_SQL_Running_State为Waiting until MASTER_DELAY seconds after master executed event,此字段包含一个整数,指示延迟剩余的秒数。在其他时间,此字段为NULL。
Slave_SQL_Running_State:一个字符串,指示SQL线程的状态(类似于 Slave_IO_State)。