码迷,mamicode.com
首页 > 数据库 > 详细

MySQL5.7 半同步复制

时间:2017-12-25 13:44:00      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:level   func   sla   内容   form   rac   低延时   文件   不一致   

一、概述

5.5与5.7的半同步复制可能存在差异,从MySQL5.5开始,MySQL以插件的形式支持半同步复制

异步:默认情况下,MySQL复制是异步的。主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理。此时若是主若是崩溃了,那提交完成的事务可能并没有传到从上,从而导致数据不一致。

全同步:当主库执行完接受到的事务,会等待所有从机执行此事务的返回值,当收到所有从机的返回值时才会返回给客户端。所以对性能的影响严重。

半同步:介于以上两者之间,主库在执行完客户端的事务后,会等待至少一个从机接收到并写入relay log中才会返回给客户端。它提高了数据的安全性, 也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

relay log中继日志:在salve中IO线程会拉去master的二进制到relay log中,然后SQL线程会读取relay-log日志的内容并应用到从服务器。

 

两个插件实现半同步功能。主端有一个插件,从端有一个插件。
半同步复制必须在主和从都有启用,否则使用异步复制。
只有事件写入中继日志并且刷新到磁盘后,从设备才会确认收到事务的事件。
如果无任何从服务器确认事务的情况下发生超时,主服务器将恢复异步复制。当至少一个半同步丛机赶上,主机将返回到半同步复制。

After_commit(5.6缺省值)
Master将事务写进binlog日志中,传递到slave刷新到relay_log,同时master提交事务。Master等待slave反馈写入了relay log,只有收到sck包后master才会将commit ok结果反馈给客户端

After_sync(5.7缺省值)
master将事务写进binlog中,传到slave刷新到磁盘relay log。Master等待slave收到ack包之后,再提交事务并且返回commit ok结果给客户端,这样即使主库宕机了,也可以保证所有主库上的书屋都已经同步到了slave的relay log上去。

 

二、半同步复制配置

1.)安装相关插件

master: --安装 semisync_master.so插件
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;

slave:  --安装 semisync_slave.so插件
mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;

查看是否安装插件:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE ‘%semi%‘;
+------------------------------+-------------------------+
| PLUGIN_NAME           | PLUGIN_STATUS |
+------------------------------+-------------------------+
| rpl_semi_sync_master | ACTIVE         |
+------------------------------+------------------------ +

 

2.默认情况下它是禁用的。主端和从端都必须启用插件才能启用半同步复制

开启方式:

1.)更改变量:
master:
SET GLOBAL rpl_semi_sync_master_enabled = {0|1}; #1来启用半同步复制,0来禁用它
SET GLOBAL rpl_semi_sync_master_timeout = N; #该值N以毫秒为单位给出。默认值是10000(10秒)
slave:
SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};

2.)修改配置文件:
[mysqld]
rpl_semi_sync_master_enabled = 1
...
......
如果是在运行的的从站上启用半同步复制,则需要重启I/O线程,使从站重新连接主并注册为半同步丛站。
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

3.监控半同步复制
mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%‘;

+-------------------------------------------+------------+
| 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_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)

 

mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%‘;

+--------------------------------------------+-------+
| 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模式下,成功的事务数
+--------------------------------------------+-------+
15 rows in set (0.00 sec)

 

MySQL5.7 半同步复制

标签:level   func   sla   内容   form   rac   低延时   文件   不一致   

原文地址:http://www.cnblogs.com/Confession/p/8108786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!