mysql 5.5半同步复制功能部署
安装、配置Semi-sync Replication
在两台主机上安装好MySQL5.5,编译好的插件在目录CMAKE_INSTALL_PREFIX/lib/plugin下(默认是/usr/local/mysql/lib/plugin)。例如这里编译是指定CMAKE_INSTALL_PREFIX为/home/mysql/mysql,则有:semisync_master.so semisync_slave.so
mysql主从备份之间存在同步,半同步与异步的方式,对于同步与异步相对而言比较好理解,但是同步存在延迟比较大,效率不高,异步又不能百分百保证数据的一致性。而半同步方式正好是两者的兼容。
mysql半同步模式是在mysql5.5版本以后增加的,所谓半同步指当master事物提交后,等待slave接收日志后才返回给应用层表示成功,事物足够小,延迟较小的话,通过半同步的模式,牺牲较小的性能就能保证数据不丢失。
但是半同步的方式也存在着缺陷,完成单条事物增加了额外的开销,同时延迟的大小也取决于网络的好坏。
采用半同步的方式,当slave down机时,master在一次等待超时时,会关闭半同步的特性,切换到异步的方式。master down机后,可能存在一些事务已经在主库Commit,但是还没有传给任何slave,这类事务被称为"墙头事务",“墙头事务”都是没有返回给slave的,所以发起事务的应用层并不知道这个事务是否已经完成。这时,如果应用层不做切换,只是等down机的master恢复后,继续在master进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果应用层Failover到slave上,应用层会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。
对于slave可以有多个,任何一个slave接收完成日志后,master就可以返回给应用层了,网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; Query OK, 0 rows affected (0.01 sec) mysql> show global variables like 'rpl_semi_sync%'; +------------------------------------+-------+ | 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.00 sec)
从库需要安装rpl_semi_sync_slave
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; Query OK, 0 rows affected (0.01 sec) mysql> show global variables like 'rpl_semi_sync%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | rpl_semi_sync_slave_enabled | OFF | | rpl_semi_sync_slave_trace_level | 32 | +---------------------------------+-------+ 2 rows in set (0.01 sec) mysql>
这些参数是可以动态修改的
rpl_semi_sync_master_enabled :
启动master 支持半同步复制。
rpl_semi_sync_master_timeout :
主库等待半同步复制信息返回的超时间隔,默认10秒
rpl_semi_sync_master_trace_level :
监控等级:
1 = general level (for example, time function failures)
16 = detail level (more verbose information)
32 = net wait level (more information about network waits)
64 = function level (information about function entry and exit)
rpl_semi_sync_master_wait_no_slave :
是否允许master 每个事物提交后都要等待slave 的receipt信号。
默认为on ,每一个事务都会等待,如果slave当掉后,当slave追赶上master的日志时
,可以自动的切换为半同步方式,如果为off,则slave追赶上后,也不会采用半同步的
相应的系统的状态变量:master
mysql> show global status like 'rpl_semi_sync%'; ; +--------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------+-------+ | Rpl_semi_sync_master_clients | 1 | #记录支持半同步的slave的个数 | Rpl_semi_sync_master_net_avg_wait_time | 411 | #master 等待slave 回复的平均等待时间。 单位毫秒. | Rpl_semi_sync_master_net_wait_time | 27959 | #master 总的等待时间 | Rpl_semi_sync_master_net_waits | 68 | #master 等待slave 回复的的总的等待次数 | Rpl_semi_sync_master_no_times | 0 | #master 关闭半同步复制的次数 | Rpl_semi_sync_master_no_tx | 0 | #aster 没有收到slave的回复而提交的次数 | Rpl_semi_sync_master_status | ON | #标记master现在是否是半同步复制状态 | Rpl_semi_sync_master_timefunc_failures | 0 | #时间函数未正常工作的次数 | Rpl_semi_sync_master_tx_avg_wait_time | 512 | #开启Semi-sync,事务返回需要等待的平均时间 | Rpl_semi_sync_master_tx_wait_time | 34881 | #事务等待备库响应的总时间 | Rpl_semi_sync_master_tx_waits | 68 | #事务等待备库响应的总次数 | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | #改变当前等待最小二进制日志的次数 | Rpl_semi_sync_master_wait_sessions | 0 | # 当前有几个线程在等备库响应 | Rpl_semi_sync_master_yes_tx | 68 | # Semi-sync模式下,成功的事务数 +--------------------------------------------+-------+
slave 的系统状态变量
mysql> show global status like 'rpl_semi_sync%'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | Rpl_semi_sync_slave_status | OFF | +----------------------------+-------+ 1 row in set (0.01 sec) #标记slave 是否在半同步状态。
关于Rpl_semi_sync_master_wait_pos_backtraverse
花了一些时间弄明白这个变量,继续证实了这个变量确实不重要。
在semisync_master中,维护了这样的两个变量wait_file_name_和wait_file_pos_,当主库上多个事务都在等待备库的响应时,这两个变量记录了所有等待中,最小的那一个Binlog位置。如果这时,一个新的事务加入等待,并且该事务需要等待的Binlog比wait_file_name_和wait_file_pos_还小的话,则更新这两个值,并将Rpl_semi_sync_master_wait_pos_backtraverse值自增一次。
配置mysql原生主从,master配置:
# master my.cnf log-bin = /data/mysqllog/binlog/mysql-bin expire_logs_days = 2 server-id = 20 ID,主从不可重复 binlog-do-db = dingmh #需要同步的库 binlog-ignore-db = mysql #忽略同步的库 增加主从同步的帐户 GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'172.168.10.12' IDENTIFIED BY '123456'; #slave my.cnf server-id = 21 replicate-do-db = dingmh #需要复制的数据库名 replicate-ignore-db= xxx #不需要复制的数据库名 change master to master_host='172.168.10.11',master_user='slave001',master_password='123456'; slave start;
配置semi-sync:
#master my.cnf rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 #slave my.cnf rpl_semi_sync_slave_enabled=1
转载于:https://blog.51cto.com/dingmh/1407563
mysql 5.5半同步复制功能部署相关推荐
- MySQL 5.5 到MySQL 5.6半同步复制(SSL)
数据放在一个raid 1上: [root@slave1 ~]# yum -y install mdadm [root@slave1 ~]# mdadm -C /dev/md0 -l1 -n2 /dev ...
- mysql确认半同步命令_怎么判断mysql是否是半同步复制
AFTER_COMMIT(5.6默认值) master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务.master等待slave 反馈收到relay ...
- mysql主从复制,半同步,主主复制架构的实现
mysql的数据同步功能,不仅在一定程度上提供数据库查询时的负载均衡,而且为实现数据库的冗灾.备份.恢复.负载均衡等都是有极大帮助.而数据的同步功能可以通过主从复制来实现,而主从复制是异步进行的,并且 ...
- mysql 5.5半同步复制_MySQL5.5配置安装半同步复制
确认master和slave上是否开启have_dynamic_loading master MASTER@root@(none) 10:54:58>show variables like 'h ...
- Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上
场景 kettle 中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后 以一种指定的格式流出.是一款由纯Java编写的ETL工具,绿色无需安装,数据抽取高效稳定(数据迁移工具). ...
- MySQL 迁移到半同步模式
下面实验是基于http://5073392.blog.51cto.com/5063392/1536487搭建的 1) 在master上安装插件 mysql> install plugin rpl ...
- mysql 5.5半同步复制_(5.5)mysql高可用系列——MySQL半同步复制(实践)
关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...
- mysql 1539_MySQL:半同步(三)从库端初始化和回调函数
源码版本5.7.29 一.全局变量 semisync_slave_plugin.cc ReplSemiSyncSlave repl_semisync; /* indicate whether or n ...
- mysql semi-sync(半同步复制)
半同步复制: 5.5集成到MySQL,以插件的形式存在,需要单独安装 确保事务提交后bnog至少传输到一个从库 不保证从库应用完这个事务的binlog 性能有一定的降低,响应时间会更长 网络异常或从库 ...
最新文章
- jquery获取对象
- sscanf操作字符串和整型的区别
- 【数学和算法】最小二乘法,SVD奇异值分解、LU分解的应用场景
- linux 挂载ISO文件以及yum源配置
- leetcode 384. Shuffle an Array | 384. 打乱数组(Fisher-Yates洗牌算法)
- Spring开启@Async异步方法(javaconfig配置)
- 【SDK】Memory read error at 0xF8007080
- 30-算法训练 最短路 spfa
- linux定位异常前后日志信息
- WINDOWS获得当前执行程序路径的办法
- 高版本linux安装gamit,Ubuntu 14.04下安装GAMIT/GLOBK10.50软件
- 周测作业五(apache的安装与配置)
- 什么是iu组装服务器,IU李知恩和“买家秀”在“教科书”级别的私有服务器共享是邻居...
- 单词迷阵游戏就是从一个10x10的字母矩阵中找出目标单词,查找方向可以从左往右、从右往左、从上往下或者从下往上。例如下面的迷阵中包含quot等单词。
- python二级第四套答案
- 计算机网络笔记---互联网的组成及三种交换方式
- SAP MM 物料主数据:公司代码 XXXX 不存在或没有完全维护
- Win10家庭版如何正确关闭自动更新
- 超融合服务器硬件与普通区别,超融合架构与传统的IT架构有哪些区别
- 冯诺依曼设计的计算机局限性,计算机智能化中冯·诺依曼体系结构的局限性