MySQL-Transfer2.1发布

背景

  主从切换是高可用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-10-23 06:04:28

MySQL-Transfer2.1发布的相关文章

PHP+Mysql+jQuery实现发布微博程序 php篇_php实例

先还是要说明本例的业务流程: 1.前端用户输入内容,并对输入的内容字数进行实时统计. 2.用户提交数据,jQuery实现通过Ajax向后台发送数据. 3.后台PHP接收提交表单的数据,并对数据进行必要的安全过滤. 4.后台PHP连接Mysql数据库,并将提交过来的表单数据写入到相应的数据表中. 5.后台向返回成功结果数据内容,并通过Ajax将返回的数据内容插入到前端页面中. 上述1.2步在前篇文章:jQuery篇已讲解了,本文将完成剩余的散步. 效果图: 数据表首先我们要准备一个数据表,表结构如

组件+PHP+MYSQL的新闻发布系统

mysql var x:Number = 60; var y:Number = 30; System.useCodepage = true; function inposition(myobject:Object, mylabelname:String, x0:Number, y0:Number):Void { //返回标签的位置和标志 myobject.text = mylabelname; myobject.move(x0, y0); return; } function checkin(m

Galera 将死 — MySQL Group Replication 发布

MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生可作为聊资.话说,当昨天小伙伴们沉浸于双12的买买买节奏中,孰料远在美国西海岸的Oracle官方放出了最新的MySQL 5.7.17版本.更为重要的是,MySQL Group Replication(下简称MGR)终于来了. 在之前的MySQL的一致性世界的文章中,Inside君已经表示腾讯基于Paxos的强一致方案虽好,但官方基于Paxos的方案早已箭在弦上,作

PHP+Mysql+jQuery实现发布微博程序 jQuery篇_php技巧

该应用实现了即时统计输入字数,并且通过ajax与后台交互,将输入内容插入到话题列表中.我将整个流程分为两部分,本文讲解第一部分jquery实现前端交互操作. 首先查看示例:DEMO XHTML 复制代码 代码如下: <form id="myform" action="" method="post"> <h3><span class="counter">140</span>说说你正

mysql 获取当天发布的信息的语句_Mysql

复制代码 代码如下: SELECT * FROM `p8_memberdata` where regdate BETWEEN (UNIX_TIMESTAMP(NOW())-86440) AND NOW() SELECT * FROM `p8_memberdata` WHERE DATE_FORMAT(FROM_UNIXTIME(regdate),'%Y-%m-%d')= DATE_FORMAT(NOW(),'%Y-%m-%d') order by uid desc 第一条最好显示过去24小时过去

甲骨文推出开源数据库MySQL 5.6的发布候选版

甲骨文全球大会,2012 年 10 月 1 日--甲骨文公司将在2012甲骨文全球大会(Oracle OpenWorld 2012)上首次召开MySQL Connect 大会,并于近日宣布推出全球最受欢迎的开源数据库(open-source database)MySQL 5.6的发布候选版 (MySQL 5.6 http://www.aliyun.com/zixun/aggregation/16920.html">Release Candidate). 凭借更高的应用性能.更强的可扩展性.

Oracle 宣布 MySQL 5.6 正式版发布

在 MySQL 5.5 发布两年后,Oracle 宣布 MySQL 5.6 正式版发布,首个正式版版本号为 5.6.10.在 MySQL 5.5 中使用的是 InnoDB 作为默认的存储引擎,而 5.6 则对 InnoDB 引擎进行了改造,提供全文索引能力,使 InnoDB 适合各种应用场景. 此外,子查询的性能提升也是 MySQL 5.6 的主要任务之一,5.6 中使用一种半连接(semi-joins) 和物化处理来提升子查询的执行速度,这意味着你不需要手工将包含子查询的 SQL 语句用 jo

甲骨文向MySQL用户开发者客户做出十项承诺

最近时期甲骨文与SUN公司的合并是许多开发者十分关注的问题,主要因为MYSQL这一数据库的易主可能会引起新的变化,本周甲骨文向MySQL用户.开发者.客户做出十项承诺. 甲骨文公司与欧盟委员会就甲骨文SUN公司的交易案进行了建设性的讨论,并承诺将保持MySQL在数据库市场的竞争力.为了进一步获得欧盟的批准,甲骨文公司公开其十项承诺,内容如下: 1.保证存储引擎API持续可用性.甲骨文保证并阶段性加强MySQL的可插拔存储引擎架构,让用户可以灵活选择从本地和第三方产品提供存储引擎.此保证意味着My

MySQL教程

    现在我们已经具备了所需的所有基础知识:可以将MySQL投入工作了!本节提供一个教程,帮助熟悉MySQL.在完成这个教程时,将创建一个样例数据库和这个数据库中的表,然后增加.检索.删除和修改信息与数据库进行交互.此外,在操作这个样例数据库的过程中,将能学到下列东西:    ■ 如何利用mysql客户机程序与MySQL通信.    ■ SQL 语言的基本语句.(如果您曾经使用过其他RDBMS,从而熟悉SQL,那么浏览一下这个教程,看看SQL 的MySQL版与您熟悉的版本有何差别也是很好的.)

需要避免的MYSQL客户机程序设计错误

    6.8 其他主题    本节包括几个主题,这些主题不完全适合于本章从client1到client5 的开发中的任一小节的内容:    ■ 在使用结果集元数据帮助验证这些数据适合于计算之后,使用结果集数据计算结果.    ■ 如何处理很难插入到查询中的数据.    ■ 如何处理图形数据.    ■ 如何获得表结构的信息.    ■ 常见的MySQL程序设计错误及如何避免.    6.8.1在结果集上执行计算    迄今为止,我们集中而主要地使用了结果集元数据来打印行数据,但很明显,除打印之