简述mysql半同步复制—semisync

mysql的半同步复制-semisync是基于默认的异步复制和完全同步复制之间,它是在master在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个slave收到并写到relay log中才返回给客户端。相对于异步复制,semisync提高了数据的安全性,但是又比完全同步性能好,所以master和slave之间的时间一定要一致,以免造成semisync失败。mysql的半同步复制的插件是由Google免费提供的在mysql的$basedir/lib/plugin下有相应的动态库文件,linux中是.so,DOS系统中是.dll,在默认情况下mysql是没有装载semisync的插件,所以要制作semisync要手动在mysql的shell中装载插件,下面就简单的说一说mysql的semisync配置,这里要注意要使用mysql的super用户来配置,并且mysql要5.5及以上版本才有,并且要在有异步复制的基础上才可以做配置

#master中

mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like ‘%semi%‘;                            
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   | 
| rpl_semi_sync_master_timeout       | 10000 | 
| rpl_semi_sync_master_trace_level   | 32    | 
| rpl_semi_sync_master_wait_no_slave | ON    | 
+------------------------------------+-------+
4 rows in set (0.01 sec)
mysql> set global rpl_semi_sync_master_enabled = 1;#开启master上的semisync,设置超时时间,可以通过设置rpl_semi_sync_master_timeout变量来修改,默认单位为毫秒
Query OK, 0 rows affected (0.00 sec)
mysql> show status like ‘%Rpl_semi_sync%‘;
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     | 
| Rpl_semi_sync_master_net_avg_wait_time     | 565   | 
| Rpl_semi_sync_master_net_wait_time         | 3391  | 
| Rpl_semi_sync_master_net_waits             | 6     | 
| Rpl_semi_sync_master_no_times              | 1     | 
| Rpl_semi_sync_master_no_tx                 | 12    | 
| Rpl_semi_sync_master_status                | ON    | 
| Rpl_semi_sync_master_timefunc_failures     | 0     | 
| Rpl_semi_sync_master_tx_avg_wait_time      | 588   | 
| Rpl_semi_sync_master_tx_wait_time          | 3528  | 
| Rpl_semi_sync_master_tx_waits              | 6     | 
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     | 
| Rpl_semi_sync_master_wait_sessions         | 0     | 
| Rpl_semi_sync_master_yes_tx                | 6     | 
+--------------------------------------------+-------+
14 rows in set (0.00 sec)

#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 ‘%semi%‘;
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)
mysql> set global rpl_semi_sync_slave_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> stop slave IO_THREAD;start slave IO_THREAD;#重启slave上的IO线程
Query OK, 0 rows affected (0.09 sec)

Query OK, 0 rows affected (0.00 sec)
mysql> show status like ‘%Rpl_semi_sync%‘;
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)

这样简单的semisync就配置好了,这里要注意的是如果master超过超时时间没有接收到slave的消息时会自动转为异步复制,当然如果不需要semisync可以直接uninstall相应的插件

mysql> uninstall plugin rpl_semi_sync_master;
Query OK, 0 rows affected (0.00 sec)
mysql> uninstall plugin rpl_semi_sync_slave;
Query OK, 0 rows affected (0.00 sec)
时间: 2024-10-06 19:13:03

简述mysql半同步复制—semisync的相关文章

MySQL半同步复制实践

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

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

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

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

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

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半同步复制原理配置与介绍详解

环境介绍: 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半同步复制配置

ansible-playbook -f 3 endpoint/mysql.yml -e "exec=fileConfig" -e "db_action=setAll" -e "paras={'plugin-load':'semisync_master.so;semisync_slave.so',rpl_semi_sync_master_enabled:'1',rpl_semi_sync_master_timeout:'1000',rpl_semi_sync