存档

文章标签 ‘MySQL Replication’

lbmysqlping (LegendBase MySQL Ping)

2012年6月1日 谭俊青 3 条评论

lbmysqlping (LegendBase MySQL Ping) is a tool that does MySQL service availability check for MySQL HA solution.

Of course, it could be used to monitor MySQL servers availability. If some server down, LBMySQLping will run “Down” command that could send email or message to your mobile.

有不少朋友在做MySQL数据库高可用(Heartbeat,keepalived)和主从负载均衡(LVS,F5,A10等)的时候都面对MySQL服务可用性检测的问题.

检测可用性面对的几个问题不太容易解决:

  • 端口能连上,但是SQL语句很可能无法执行,其实这时候MySQL服务是不可用的
  • 连上了,SQL语句执行堵塞,长时间不能返回,因为MySQL是堵塞式的
  • MySQL Slave延时太大,应该从路由表里面清除

而且我了解到的有不少人都是用检测端口的方法,这是有风险的.

今天贡献的lbmysqlping通过可配置的方式,能够灵活的对MySQL服务进行检测,如果出现异常\超时或者Slave延时超过配置大小,可以执行指定的失效命令,当服务恢复可用的时候又可以执行恢复命令.

另外lbmysqlping还可以做简单的报警系统,配置好默认信息后,其他realserver 只需要配置ip地址即可,如果端口不一样,改下端口。然后在down命令和up命令里面填上相关的脚本或者报警程序,这样一个简单的MySQL服务可用性报警系统就出来了,简单、高效。

配置文件格式如下:

【阅读全文·MySQL实验室】

MySQL5.6发布及其新特性

2011年4月12日 谭俊青 4 条评论

在去年MySQL用户大会的时候,Sun发布了MySQL5.5。今天Oracle MySQL在MySQL User Conference 2011(MySQL用户大会)又扔出了个重磅炸弹,MySQL5.6发布

列举下MySQL5.6部分新特性:

  • InnoDB现在可以限制大量表打开的时候内存占用过多的问题(比如这里提到的)(第三方已有补丁)
  • InnoDB性能加强。如分拆kernel mutex;flush操作从主线程分离;多个perge线程;大内存优化等
  • InnoDB死锁信息可以记录到 error 日志,方便分析
  • MySQL5.6支持延时复制,可以让slave跟master之间控制一个时间间隔,方便特殊情况下的数据恢复。
  • 表分区功能增强
  • MySQL行级复制功能加强,可以降低磁盘、内存、网络等资源开销(只记录能确定行记录的字段即可)
  • Binlog实现 crash-safe
  • 复制事件采用crc32校验,增强master/slave 复制数据一致性
  • 新增 log_bin_basename (以前variables里面没有binlog位置信息,对数据库的监管很不方便)

更多信息见:http://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html

MySQL5.5复制/同步的新特性及改进

2010年12月2日 谭俊青 2 条评论

半年之前我有幸参加了MySQL2010用户大会,Oracle/Sun在会上公布了MySQL5.5的新特性,这次MySQL5.5改进的地方非常之多,当中引入的Google patch for MySQL中的半同步Semi-synchronous Replication,一个可用于高可用解决方案的新特性。谭俊青@MySQL实验室

MySQL5.5的在复制/同步方面的改进:

  • 保证主从服务器上数据的一致性(同步)
  • 能立检测到复制的异常
  • Crashed Salve能自动从错误中恢复同步
  • 在环形复制中用户能够指定跳过某实例事件
  • 主从复制中能自动适应字段类型的转换

MySQL半同步复制(semi-synchronous replication)

默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled=1;

复制心跳(用户检测复制是否中断)

MySQL5.5提供的新的配置master_heartbeat_period,能够在复制停止工作和出现网络中断的时候帮助我们迅速发现问题。

启用方法:

STOP SLAVE;

CHANGE MASTER TO master_heartbeat_period= milliseconds;

START SLAVE;

Slave自动恢复同步

在MySQL5.5版本之前,MySQL Slave实例在异常终止服务之后,可能导致复制中断,并且relay binlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。

跳过指定复制事件

在多Master或环形复制的情况下,处于复制链条中间的服务器异常,可以通过

CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y

跳过出问题的MySQL实例。

自动转换字段类型

MySQL5.1在基于语句的复制下,支持部分的字段转换,但是行级的会报错。MySQL5.5语句和行级复制都已支持。还可以通过 SLAVE_TYPE_CONVERSIONS 控制转换的方向。

致歉好耶开发人员

2010年8月3日 谭俊青 3 条评论

在这里给好耶参加MySQL性能调优培训的朋友们致歉。继上上周培训课程结束之后,因个人原因,未能继续给大家上课,还让大家在周六等了那么长时间,向大家说声:“对不起”。

PS1: 陆续有朋友问及MySQL高可用方案,这里提下:当前MySQL高可用方案自动化程度和靠谱的算是DRBD和Semi-sync-replication。在此基础上扩展slave做负载均衡(比如lvs)需要注意,另外需要monitor监控Slave状态,及时将失效节点从pool中剔除。

PS2: 这次有个项目,因为开发过程中经历了大量的需求变更,开发人员为了方便,采用了大量试图,导致后续出现严重问题(SQL查询时间过长),而在此基础之上做SQL调优能发挥的地方有限,所以开发的同志们注意了,在涉及到web开发,特别是对页面响应时间要求很高的时候,避免复杂join操作,适当添加冗余字段。救急办法:将涉及到的中间试图换成base表,在原始表上添加触发器。

PS3:前几天又有朋友问到session管理,我给的方案还是用 MySQL Cluster NDB 管理,其中我还发布过一个PHP 实现的 DbSession类,为了提高性能可以不记录任何日志信息(重启之后数据消失),”SET GLOBAL ndb_table_no_logging = 1;”。

PS4:据说这个是史上最牛的MySQL补丁,非堵塞是的网络IO,可以让32核心的机器跑上18万QPS。