设为首页 收藏本站
查看: 837|回复: 0

[经验分享] msyql 的半同步复制

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-23 09:39:33 | 显示全部楼层 |阅读模式
mysql的半同步复制:

mysql的异步复制:mysql默认使用异步方式进行同步,master在执行客户端提交的事务后会将结果返回给客户端,表示客户端的操作已经生效,同时会将该操作的binlog通过dumper通知slave来取,再正常情况下,slave会将该binlog写入本地,并通过sql语句写入从库中与主库同步数据,master对从库是否写入不负任何责任。
主和从的复制过程是由三个线程参与完成的,其中有两个线程(sql语句和I/O线程在slave端),一个I/O线程在master端。
mysql的同步复制:这是一个偏执狂,客户端向主库提交数据,主库写入数据只有从库将数据写入本地后,返回给主库一个回执,主库向客户端返回消息,表示已经成功受理该任务。
mysql半同步:在master的dumper线程通知salve,同时增加了一个ack,mysql5.7支持在事务提交前等待ack,当slave没有返回给master ack时,将会自动降级为异步复制。
半同步通过rpl_semi_sync_master_wait_point参数来控制半同步下,master事务提交前的方式
mysql中的半同步参数after_sync,master 将每个事务写入binlog传递到slave刷新到磁盘relay log,master等待slave反馈接收到的ack后在提交事务并返回提交成功给客户端。
半同步的部署:
半同步基于mysql的异步复制,所以要先搭建好环境。环境搭建参考我的博客:http://12237658.blog.iyunv.com/12227658/1907018
测试:
主:master
安装半同步插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.08 sec)
查看插件是否安装成功:
mysql> show plugins;会在最后发现:
| ngram                      | ACTIVE   | FTPARSER           | NULL               | GPL     |
| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
+----------------------------+----------+--------------------+--------------------+---------+
表明成功。
从:slave
安装插件:
mysql>  INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.11 sec)
使用:show plugins;或:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';
如果发现
| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so | GPL     |
+----------------------------+----------+--------------------+-------------------+-----
即为成功。
启动半同步:
主:master
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
+-----------------------------+-------+
1 row in set (0.00 sec)
从:slave
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)
最后重新启动一下I/O线程:
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
测试:
在不关闭slave的情况下创建数据库,主从库会很快写入
主:
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
+-----------------------------+-------+
1 row in set (0.00 sec)
mysql> create database ginkgo;
Query OK, 1 row affected (0.05 sec)
从:
mysql> show  status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ginkgo             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
将从上的slave关闭:
mysql> drop database ginkgo;
Query OK, 0 rows affected (10.06 sec)
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | OFF   |
+-----------------------------+-------+
1 row in set (0.00 sec)
slave长时间不给ack回应,被迫转化为异步,时间也较长,主要是等待时间。
从上肯定没有数据变化。
**注意,写数据库时一定要在配置文件中确定自己是允许那个库同步,不要瞎建库奥。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-353908-1-1.html 上篇帖子: mysql二进制安装启动的问题 下篇帖子: MySQL的多表设计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表