master_pos_wait函数与MySQL主从切换

背景

  主从切换是高可用MySQL架构的必要步骤(即使用不发生,也要有备无患)。一般设置为双M(M1、M2),假设当前状态为写M1,而M2只读,切换的大致流程如下:

1、  停止应用写M1,将M1设置为只读
2、  检查M2的slave status直到赶上M1
3、  将M1设置为可写

 

   其中在第2步细化为
a)       在M1上show master status;得到binlog位置P,因为已经设为只读,不会变化
b)       循环检测M2上的执行位置,若未到P,则过几秒再查。循环直到从库追上。

 这里介绍一个函数用于简化步骤b.

 

函数master_pos_wait

    语法 select master_pos_wait(file, pos[, timeout]).
    这里的file和pos对应主库show master status得到的值,代表执行位置。 函数逻辑是等待当前从库达到这个位置后返回, 返回期间执行的事务个数。
    参数timeout可选,若缺省则无限等待,timeout<=0时与缺省的逻辑相同。若为正数,则等待这么多秒,超时函数返回-1.
    其他返回值:若当前slave为启动或在等待期间被终止,返回NULL; 若指定的值已经在之前达到,返回0

 

master_pos_wait的实现逻辑

    用户调用该函数后,根据传入参数调用pthread_cond_timedwait或pthread_cond_wait。 SQL_THREAD线程每次apply完一个事件后会触发更新relay info, 并通知上面等待的线程。因为可能有多个用户等待,因此用广播方式。

    关于事件个数的计算比较复杂,有兴趣的同学可以看这篇, 不过在本文讨论的这个问题上,正数返回值并不重要。

 

小结

用master_pos_wait来实现上面的步骤b,则可以简化为:
b’) 在M上执行select master_pos_wait(file, pos),返回后判断一下返回值>=0 则认为主从同步完成。

 

 好处是
1) 简化逻辑,不用在应用脚本判断
2) 在追上的第一时间就能感知,否则可能多等若干秒

时间: 2024-09-09 13:18:58

master_pos_wait函数与MySQL主从切换的相关文章

MHA实现mysql主从切换之主故障

本文主要模拟实现主Master故障后,手动指定Master到从节点.   #masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf  --dead_master_host=10.1.1.231 --dead_master_ip=10.1.1.231 --dead_master_port=63306  --new_master_host=10.1.1.234 --new_master_ip=10.1.1.23

mysql主从切换(正常切换)

环境: 主从:mysql 5.6.10   centos 6.5   步骤: 主从库创建复制账号: 建议主从库复制账号密码一模一样. grant all privileges on *.* to '$username'@'%' identified by '$password' with grant option; flush privileges;  将主从(3307主----3309从)切换 主库上: 前提:3307正常  一.将3307设为只读.命令行操作  # 修改配置文件  vim /

MySQL主从切换

1.切换之前确保主从是同步的 原主库(192.168.10.197): mysql> show processlist; +----+-------------+----------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+ | Id | User | Host |

【原创】基于 Keepalived 做主备的 MySQL 在切换时遇到的问题

问题描述: MySQL 基于 keepalived 实现主备切换,业务 A 和业务 B (其实 A 和 B 上跑的业务是相同的 )同时使用 MySQL 做数据库查询.通过重启 keepalived 服务来测试 MySQL 主备切换后,能够为业务提供正常的服务.  问题现象: 测试人员发现 MySQL 主从切换之后,与业务 A 相关的 TCP 连接信息已经变更为新 TCP 连接,而与业务 B 相关的 TCP 连接信息仍旧未变化.  具体环境如下: 业务A:172.16.177.158 业务B:17

MHA实现mysql主从数据库手动切换的方法_Mysql

本文实例讲述了MHA实现mysql主从数据库手动切换的方法,分享给大家供大家参考.具体方法如下: 一.准备工作 1.分别在Master和Slave执行如下,方便mha检查复制: 复制代码 代码如下: grant all privileges on *.* to 'root'@'10.1.1.231' identified by 'rootpass'; grant all privileges on *.* to 'root'@'10.1.1.234' identified by 'rootpas

高性能Mysql主从架构的复制原理及配置详解(转)

温习<高性能MySQL>的复制篇. 1 复制概述       Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器

MySQL主从严重延迟后迁移Transfer的注意事项

MySQL-Transfer逐渐有一些其他公司的同学在使用,这里会持续更新运维上的注意事项.        背景        正常情况下,若要从原来的主从切换成Transfer 模式,只需要作如下步骤: 1.在slave相同机器上部署一个Transfer,并配置好各种remote_slave参数 2.在slave上stop slave 3.把slave的表结构dump给transfer 4.从slave中查看当前执行到master的位置 5.在transfer执行change master x

Linux环境中MySQL主从同步--添加新的从库

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1689171 当前我认为数据库主从有两大应用价值: 1.从库相当于主库的备份.虽然数据库的主从并不能代替/取代备份,例如错误的数据可能毁掉所有的数据库,但主从也是在一种可读的状态下保持备份的一种实现方式. 2.从库可以缓解主库的压力,能提高性能.由于从库是只读的,因此在读取查询方面,从库可以代替主库,承担一定的压力,

学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一点Git--20分钟git快速上手 里的踊跃发言.这里再次分享干货, 简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一 致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到另一个. 2. 可以做负载均衡,可以将请求分摊到其中任何一台上