Archive

Author Archive

mysqld: Got error 514 from select

September 22nd, 2011 No comments

在线上一台MySQL机器遇到这样的问题:

MySQL无法连接,pstack 无法打印出MySQL的stack trace。在alert.log里仅有一条error:

110829 20:25:51 [ERROR] mysqld: Got error 514 from select

这条语句出现在监测到问题之前发生(精确的时间点我这没有拿到)。

查了下是select系统调用的一个bug。有这么一句解释:此错误是用户程序不应该看到的, 不幸被MySQL看到了:
errno 514 is ERESTARTNOHAND (restart if no handler), and is in a section marked as “should never be seen by user programs”.

对于的OS和MySQL版本信息如下:

$ uname -a
Linux dev031033.sqa.cm4 2.6.9-55.ELsmp #1 SMP Fri Apr 20 16:36:54 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
$ mysql –version
mysql Ver 14.14 Distrib 5.1.37, for unknown-linux-gnu (x86_64) using EditLine wrapper

那只能很不幸的说,在2.6.9版本中确实有这么一个bug,但这个bug在2.6.38中已经进行了处理,将ERESTARTNOHAND替换成EINTR: Read more…

Categories: 数据库 Tags:

mysql binlog的row模式数据解析

September 16th, 2011 No comments

drc-mysql是一种支持多master多slave的快速并行复制的解决方案,基于mysql的binlog,目前支持binlog的STATEMENT模式。为了实现drc-mysql对ROW模式的支持,本文对此展开研究,分析了binlog的事件格式,并针对不同的数据类型进行解析。

本文的目的是为了展示如何从row模式事件中解析数据,因此事件中一些记录其他信息的字节会直接略过,感兴趣的同学可以看看log_event.h以及log_event.cc两个文件。

 

获取Binlog事件:

Mysql对Binlog的处理是以事件为单位的,每一次DML操作可能会产生多次事件,例如对于innodb存储引擎,会额外产生一条QUERY_EVENT(事务的begin语句)以及XID_EVENT(事务提交)。

通过调用libmysql.so库中的cli_safe_read()函数可以获取一次binlog事件:

cli_safe_read(mm);   // mm类型为MYSQL*

net =  &mm->net;

buf = (const char*) net->read_pos + 1; Read more…

Categories: 数据库 Tags: ,