MySQL半同步复制实战

一:前提条件主从复制已经做好(见前文)

二、实现半同步复制的前提条件

1.安装plugin插件

MySQL默认是不支持半同步的,是用plugin插件插件来支持的。不论是二进制还是编译安装的,

都会默认生成这个插件,在使用之前必须安装这个插件。

2.安装需要分别在主从端开启该服务

三、环境准备:检查系统环境

[[email protected] ~]# uname -r

2.6.32-431.el6.x86_64

[[email protected] ~]# uname -n

master

[[email protected] ~]#cd /usr/local/mysql/lib/plugin  查看插件的路径

[[email protected] plugin]# ls

adt_null.so          debug                 qa_auth_server.so

auth.so              libdaemon_example.so  semisync_master.so

auth_socket.so       mypluglib.so          semisync_slave.so

auth_test_plugin.so  qa_auth_client.so     validate_password.so

daemon_example.ini   qa_auth_interface.so

这两个文件必须存在:semisync_master.so  semisync_slave.so

2.主从复制搭建必须成功

3.主库Master上面配置半同步

(1)[[email protected] ~]#/usr/local/mysql/lib/plugin  插件的位置

(2)查看数据库是否支持动态载入插件,该项必须yes:

mysql> show global variables like ‘have_dynamic_loading‘;

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

| Variable_name        | Value |

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

| have_dynamic_loading | YES   |

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

1 row in set (0.00 sec)

mysql>

(3)mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;

Query OK, 0 rows affected (0.02 sec)   安装插件成功

mysql>

(4)开启半同步插件服务

mysql> set global rpl_semi_sync_master_enabled = 1;

Query OK, 该项参数0和1表示,1表示开启,0表示关闭。

注意:这种设置方式是临时生效,永久生效写的my.cnf 且重启服务

mysql> set global rpl_semi_sync_master_timeout = 5000;

Query OK, 0 rows affected (0.00 sec) 设置超时时间为5S,表示5s未收到从的响应,自动转换为异步模式。

mysql>

[mysqld]  永久生效

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

4.从库Slave上配置半同步

(1)[[email protected] ~]#/usr/local/mysql/lib/plugin  插件的位置

(2)查看数据库是否支持动态载入插件,该项必须yes:

mysql> show global variables like ‘have_dynamic_loading‘;

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

| Variable_name        | Value |

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

| have_dynamic_loading | YES   |

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

1 row in set (0.00 sec)

mysql>

(3)安装半同步插件

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

Query OK, 0 rows affected (0.04 sec)

(4)开启半同步插件服务

mysql> set global rpl_semi_sync_slave_enabled = 1;  临时生效

Query OK, 0 rows affected (0.00 sec)

[mysqld]

rpl_semi_sync_slave_enabled=1    需要重启服务

四、安装完成,检查配置

(1)mysql> select * from information_schema.plugins\G 检查安装成功与否的状态

(2)mysql> show status like "%semi%";   查看半同步的复制状态

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

| Variable_name                              | Value |

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

| Rpl_semi_sync_master_clients               | 1     |半同步复制客户端的个数

| Rpl_semi_sync_master_net_avg_wait_time     | 0     |平均等待时间(默认毫秒)

| Rpl_semi_sync_master_net_wait_time         | 0     |总共等待时间

| Rpl_semi_sync_master_net_waits             | 0     |等待次数

| Rpl_semi_sync_master_no_times              | 0     |关闭半同步复制的次数

| Rpl_semi_sync_master_no_tx                 | 0     |表示没有成功接收slave提交的次数

| Rpl_semi_sync_master_status                | ON    |表示当前是异步模式还是半同步模式,on为半同步

| Rpl_semi_sync_master_timefunc_failures     | 0     |调用时间函数失败的次数

| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |事物的平均传输时间

| Rpl_semi_sync_master_tx_wait_time          | 0     |事物的总共传输时间

| Rpl_semi_sync_master_tx_waits              | 0     |事物等待次数

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

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

| Rpl_semi_sync_master_yes_tx                | 0     |成功接受到slave事物回复的次数

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

14 rows in set (0.00 sec)

mysql>

(3)创建库,试试看看Rpl_semi_sync_master_yes_tx是否发生变化,变化表示成功采用半同步复制

mysql> create database cisco;

Query OK, 1 row affected (0.03 sec)

mysql> show status like "%semi%";

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

| Variable_name                              | Value |

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

| Rpl_semi_sync_master_clients               | 1     |

| Rpl_semi_sync_master_net_avg_wait_time     | 225   |

| Rpl_semi_sync_master_net_wait_time         | 225   |

| Rpl_semi_sync_master_net_waits             | 1     |

| Rpl_semi_sync_master_no_times              | 0     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | ON    |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 253   |

| Rpl_semi_sync_master_tx_wait_time          | 253   |

| Rpl_semi_sync_master_tx_waits              | 1     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | ***1***变化了     |

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

14 rows in set (0.00 sec)

mysql>

(4)把超时时间设置为0测试,看它是否转换为异步状态

mysql> set global rpl_semi_sync_master_timeout = 0;

mysql> show status like "%semi%";

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

| Variable_name                              | Value |

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

| Rpl_semi_sync_master_clients               | 1     |

| Rpl_semi_sync_master_net_avg_wait_time     | 223   |

| Rpl_semi_sync_master_net_wait_time         | 446   |

| Rpl_semi_sync_master_net_waits             | 2     |

| Rpl_semi_sync_master_no_times              | 1     |

| Rpl_semi_sync_master_no_tx                 | 1     |超时为0,Rpl_semi_sync_master_no_tx,参数变化,代表未走半同步的机制,走的异步。

| Rpl_semi_sync_master_status                | ON    |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 253   |

| Rpl_semi_sync_master_tx_wait_time          | 253   |

| Rpl_semi_sync_master_tx_waits              | 1     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 1     |

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

14 rows in set (0.00 sec)

mysql>

(5)总结;只有事务提交才会记录Rpl_semi_sync_master_yes_tx   1 值;查询不会记录

五、取消半同步复制的插件

192.168.11.34上:

# mysql > uninstall plugin rpl_semi_sync_master;

# mysql > show status like "%semi%"

192.168.11.35上:

# mysql > uninstall plugin rpl_semi_sync_slave;

# mysql > show status like "%semi%"

时间: 2024-10-27 12:03:28

MySQL半同步复制实战的相关文章

mysql半同步复制的实现

mysql半同步复制和异步复制的差别如上述架构图所示:在mysql异步复制的情况下,Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master Sever就自动返回数据给客户端,而不管slave上是否接受到了这个二进制日志.在半同步复制的架构下,当master在将自己binlog发给slave上的时候,要确保slave已经接受到了这个二进制日志以后,才会返回数据给客户端.对比两种架构:异步复制对于用户来说,可以确保得到快速的响应结构,但是

MySQL半同步复制

1.概述 主从复制存在三种类型:异步复制.同步复制以及半同步复制,下面根据手册上解释逐一说明一下. 异步复制: 主库将更新的事件写入binlog,准备好的从库获取这些binlong进行回放.这无法保证所有从库都接到这些事件. ? With asynchronous replication, the master writes events to its binary log and slaves request them when they are ready. There is no guar

MySQL半同步复制的数据一致性探讨微信后台团队实践【转】

MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.由于其体积小.速度快.拥有成本低,尤其是开放源码这一特点,广受各大企业欢迎,包括腾讯,阿里,百度,网易,Google,FaceBook等互联网巨头企业. 随着互联网的高速发展,互联网服务可用性变得越发重要,数据容灾也随之成为各企业的关键任务.在数据容灾中,数据库集群如何处理数据一致性也成为了各企业需要解决的问题.特别在一些新兴的金融服务中,MySQL也逐渐成为其核心数据库,如何

mysql半同步复制实现

mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下.Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master Sever就自己主动返回数据给client.而无论slave上是否接受到了这个二进制日志.在半同步复制的架构下.当master在将自己binlog发给slave上的时候.要确保slave已经接受到了这个二进制日志以后,才会返回数据给client. 对照两种架构:异步复制对于用户来说,能够确保得

MySQL半同步复制实践

半同步复制 MySQL的主从复制在5.5版本以前只支持异步复制,也就是说主库在执行一些事务后,是不管从库备库的进度的,这种方式最大的好处是速度快.效率高:缺点就是在主库宕机后,不能确保从库和主库的数据一致性. 半同步复制的好处就是,主库在每执行一次事务后,会等待备库接受日志后才返回给客户端,如果做的是小事务,两台主机的延迟较小,则可以实现在损失很小的性能的情况下保证零数据丢失. 原理 1)主库每执行一次事务都会先让备库读取日志,确保至少有一台备库上面的数据和自己完整 2)如果在一个timeout

Mysql半同步复制模式说明 - 运维小结

MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二进制日志写入binlog文件之后就返回客户端结果,不会考虑二进制日志是否完整传输到从服务器以及是否完整存放到从服务器上的relay日志中,这种模式一旦主服务(器)宕机,数据就可能会发生丢失. 异步模式是一种基于偏移量的主从复制,实现原理是:主库开启binlog功能并授权从库连接主库,从库通过chan

MySQL半同步复制原理配置与介绍详解

环境介绍: Ubuntu Server 16.04.2+MySQL 5.7.17 Community Server (GPL) MySQL安装 通过APT的方式安装,官方指导文档地址: https://dev.mysql.com/downloads/repo/apt/ 1.下载mysql-apt-config_0.8.3-1_all.deb 2.安装deb A Quick Guide to Using the MySQL APT Repository: https://dev.mysql.com

MySQL 半同步复制模式说明及配置示例 - 运维小结

MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二进制日志写入binlog文件之后就返回客户端结果,不会考虑二进制日志是否完整传输到从服务器以及是否完整存放到从服务器上的relay日志中,这种模式一旦主服务(器)宕机,数据就可能会发生丢失. 异步模式是一种基于偏移量的主从复制,实现原理是: 主库开启binlog功能并授权从库连接主库,从库通过cha

简述mysql半同步复制—semisync

mysql的半同步复制-semisync是基于默认的异步复制和完全同步复制之间,它是在master在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个slave收到并写到relay log中才返回给客户端.相对于异步复制,semisync提高了数据的安全性,但是又比完全同步性能好,所以master和slave之间的时间一定要一致,以免造成semisync失败.mysql的半同步复制的插件是由Google免费提供的在mysql的$basedir/lib/plugin下有相应的动态库文件