加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

mysql主从~半同步复制

发布时间:2022-11-17 13:31:44 所属栏目:MsSql教程 来源:转载
导读:
原理:
Master每次commit有一个事务,要确保slave接受完主服务器发送的binlog日志文件,并写入到自己的realylog中,然后会给master发送信 号,告诉对方已经接收完毕,这样master才能进行下

在这里插入图片描述

原理:

Master每次commit有一个事务,要确保slave接受完主服务器发送的binlog日志文件,并写入到自己的realylog中,然后会给master发送信 号,告诉对方已经接收完毕,这样master才能进行下一个事务。保证了master和salve的绝对一致性

半同步复制配置步骤

1)安装插件:插件存放目录$basedir/lib/plugin/

1)给master安装插件:

mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so’;

Query OK, 0 rows affected (0.13 sec)

2)查看是否安装成功

mysql> show global variables like ‘rpl_semi_sync%’;

在这里插入图片描述

rpl_semi_sync_master_enabled 是否启用master的半同步复制

rpl_semi_sync_master_timeout:默认主等待从返回信息的超时间时间,10秒。动态可调

rpl_semi_sync_master_trace_level:用于开启半同步复制模式时的调试级别mssql复制,默认是32

rpl_semi_sync_master_wait_no_slave:是否允许每个事物的提交都要等待slave的信号.on为每一个事物都等待,off则表示slave追赶上后,也不会开启半同步模式,需要手动开启

3)slave上安装插件

mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;

Query OK, 0 rows affected (0.00 sec

mysql> show global variables like ‘rpl_semi_sync%’;

在这里插入图片描述

rpl_semi_sync_slave_enabled:slave是否启用半同步复制

激活半同步

1)在master上执行

mysql> set global rpl_semi_sync_master_enabled =on;

mysql> show global status like ‘rpl_semi_sync%’;

在这里插入图片描述

Rpl_semi_sync_master_clients: 没有一个从服务器启用半同步复制

Rpl_semi_sync_master_net_avg_wait_time: master等待slave回复的平均等待时间。单位毫秒

Rpl_semi_sync_master_net_wait_time: master总的等待时间。单位毫秒

Rpl_semi_sync_master_net_waits: master等待slave回复的总的等待次数

Rpl_semi_sync_master_no_times: master关闭半同步复制的次

Rpl_semi_sync_master_no_tx: 表示从服务器确认的不成功提交的数量. Rpl_semi_sync_master_status: 标记 master现在是否是半同步复制状态

Rpl_semi_sync_master_timefunc_failures: master调用时间(如gettimeofday())失败的次数

Rpl_semi_sync_master_tx_avg_wait_time: master花在每个事务上的平均等待时间

Rpl_semi_sync_master_tx_wait_time: master花在事物上总的等待时间

Rpl_semi_sync_master_tx_waits: master事物等待次数

Rpl_semi_sync_master_wait_pos_backtraverse:后来的先到了,而先来的还没有到的次数

Rpl_semi_sync_master_wait_sessions: 当前有多少个session因为slave回复而造成等待

Rpl_semi_sync_master_yes_tx: 表示从服务器确认的成功提交数量

2)slave执行

mysql> set global rpl_semi_sync_slave_enabled=on;

mysql> show global status like ‘rpl_semi_sync%’;

在这里插入图片描述

3)重启io线程

mysql> stop slave IO_THREAD;

Query OK, 0 rows affected (0.00 sec)

mysql> start slave IO_THREAD;

Query OK, 0 rows affected (0.01 sec)

mysql> show global status like ‘rpl_semi_sync%’;

在这里插入图片描述

在这里插入图片描述

*

测试验证

原理:

当slave从库的IO_Thread 线程将binlog日志接受完毕后,要给master一个确认,如果超过10s未收到slave的接收确认信号,那么就会自动转换为传统的异步复制模式。

1) master插入一条记录,查看slave是否有成功返回

mysql> insert into a values (3);

Query OK, 1 row affected (0.00 sec)

mysql> show global status like ‘rpl_semi_sync%_yes_tx’;

在这里插入图片描述

Rpl_semi_sync_master_yes_tx:表示这次事物成功从slave返回一次确认信号

2)slave上模拟故障查看返回时间

当slave挂掉后,master这边更改操作

mysql> stop slave io_thread;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values (4);

Query OK, 1 row affected (10.00 sec)

这次插入一个值需要等待10秒(默认的等待时间)

mysql> insert into a values (5);

Query OK, 1 row affected (0.01 sec)

现在自动转成了原来的异步模式

2) 再次启动slave,查看同步模式

在这里插入图片描述

如需要再次半同步复制,则按照以上步骤重新开启就可以

mysql> set global rpl_semi_sync_slave_enabled=on;

mysql> stop slave IO_THREAD;

mysql> start slave IO_THREAD;

或者可以将该参数写入到配置文件中:

master:rpl_semi_sync_master_enabled=1

slave:rpl_semi_sync_slave_enabled=1

4、测试结果

5、master需要等到slave确认后才能提交,如果等不到确认消息,master等待10s种后自动变成异步同步;slave启起来后,master上改变的数据还是会自动复制过来,数据又回到一致。

6、等待时间可以在master上动态调整,如下

mysql> set global rpl_semi_sync_master_timeout=3600000;

Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like ‘rpl_semi_sync%’;

在这里插入图片描述

卸载插件

mysql> select plugin_name,load_option from information_schema.plugins;

mysql> uninstall plugin plugin_name;

扩展补充: 跟复制相关的文件

master.info:用于保存slave连接至master的相关信息,包括服务器地址,用户名,密码等

relay-log.info:保存在当前的slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系

复制的监控和维护

purge 命令

mysql> purge binary logs to ‘mysql-bin.000008’;

指明这个二进制文件之前的所有的文件都会被清理

mysql> purge binary logs before '2017-04-23 20:46:26'; 
指明二进制日志文件中这个时间点之前的所有的事件都会被清理

监控操作

mysql> show master status; 显示主节点正在写哪个二进制日志文件

mysql> show binlog events; 显示在二进制文件中记录了哪些信息

mysql> show binary logs ; 显示记录了哪些二进制日志文件

mysql> show slave status; 显示从服务器的状态

mysql> show processlist; 显示当前启用的线程

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!