17、CentOS7.2 MySQL5.7服务器延时复制、半同步复制

、延迟复制(在上章的基础上16、CentOS7.2 MySQL5.7服务器主从复制 ):

1、为什么要使用延迟复制?延迟复制有几个有点:

  1. 误删除恢复:就是当你或者其他人不小心删掉某个表或者库的时候,你快速的去slave恢复数据;
  2. 延迟测试:
  3. 历史查询:

2、设置方法(在slave库上执行):

mysql> stop slave;

mysql> change master to master_delay = 900; #设置15分钟,以秒为单位。

mysql> start slave;

取消延迟同步,如下:

mysql> stop slave;

mysql> change master to master_delay = 0; #设置0

mysql> start slave;

 

 

3、验证:

要有数据了才会开始计算,所以我要写入一条信息:

使用show slave status\G查看没有同步,等十五分钟后验证结果:

103没有设置就正常同步:

15分钟后,102slave也正常同步:

 

 

 

四、半同步复制:

1、半同步复制的原理

1)当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。
2)当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能。此时,一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。
3)当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到。
4)如果等待超时,也就是Master没被告知已收到,此时Master会自动转换为异步复制的机制。当至少一个半同步的Slave赶上了,Master与其Slave自动转换为半同步复制的机制。
5)半同步复制的功能要在Master,Slave都开启,半同步复制才会起作用;否则,只开启一边,它依然为异步复制。

 

2、同步,异步,半同步复制的对比

1)同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。
2)异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。
3)半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交。

 

3、在MySQL上安装插件需要数据库支持动态载入。检查是否支持命令如下:

mysql> show global variables like 'have_dynamic_loading';

+----------------------+-------+

| Variable_name        | Value |

+----------------------+-------+

| have_dynamic_loading | YES   |

+----------------------+-------+

 

 

4、Plugin目录:

mysql> show global variables like 'plugin_dir';

+---------------+------------------------------+

| Variable_name | Value                        |

+---------------+------------------------------+

| plugin_dir    | /usr/local/mysql/lib/plugin/ |

+---------------+------------------------------+

 

5、在Master上执行:

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

mysql> set global rpl_semi_sync_master_enabled = 1;

mysql> set global rpl_semi_sync_master_timeout = 5000; 单位是MS,设置5秒

 

6、在各个 Slave 上执行:

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

mysql> set global rpl_semi_sync_slave_enabled = 1;

mysql> stop slave io_thread;

mysql> start slave io_thread;

 

  1. 检查Plugin是否已正确安装:

mysql> show plugins;

或者

mysql> select * from information_schema.plugins

 

8、检查是否设置成功:

mysql> show global status like 'rpl_sem%';

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| Rpl_semi_sync_slave_status | ON    | ON设置成功,OFF未成功。

+----------------------------+-------+

 

9、将变量写入配置文件/etc/my.cnf:

Master上修改:

[mysqld]

rpl_semi_sync_master_enabled = 1

rpl_semi_sync_master_timeout = 1000  # 1s

 

 

Slave上修改:

[mysqld]

rpl_semi_sync_slave_enabled = 1

 

备注:

rpl_semi_sync_master_enabled 控制Master是否开启半同步,开启或不开启,将其设置为ON或OFF(1 or 0)。

rpl_semi_sync_master_timeout 控制Master等待多长时间被告知Slave已收到,也就是所谓的超时时间,单位是毫秒。

rpl_semi_sync_slave_enabled  控制Slave是否开启半同步,开启或不开启,将其设置为ON或OFF(1 or 0)。

猜你喜欢

转载自blog.csdn.net/weixin_41515615/article/details/82533260
今日推荐