mysqld: Got error 514 from select

2011年9月22日 由 yinfeng 没有评论 »

在线上一台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 [...]

好书推荐-《Expert Oracle Exadata》

2011年9月20日 由 jacky 没有评论 »

最近博客一直没更新,因为忙着翻译一本书,《Expert Oracle Exadata》。

本书的作者是Kerry Osborne, Randy Johnson和 Tanel Põder,看看三位重量级的作者就知道本书的技术含量非常高,尤其是在Exadata的

mysql binlog的row模式数据解析

2011年9月16日 由 yinfeng 没有评论 »

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; Binlog的事件类型大约有27种,这里只介绍与ROW模式相关的事件 1)       QUERY_EVENT:与STATEMENT模式处理相同,存储的是SQL,主要是一些与数据无关的操作,eg: begin、drop table; 2)       TABLE_MAP_EVENT:记录了下一条事件所对应的表信息,在其中存储了数据库名和表名; 3)       WRITE_ROWS_EVENT:操作类型为insert; 4)       UPDATE_ROWS_EVENT:操作类型为update; 5)       DELETE_ROWS_EVENT:操作类型为delete; 6)       XID_EVENT, 用于标识事务提交。 在buf[EVENT_TYPE_OFFSET]中记录了事件的类型 (EVENT_TYPE_OFFSET = 4),根据其中记录的整数,对比log_event.h中的Log_event_type,可以找到相应的事件类型。 以一条insert语句为例,包含4个事件: TABLE_MAP_EVENT QUERY_EVENT  (begin) WRITE_ROWS_EVENT XID_EVENT   事件时间戳: buf[0] ~ buf[3]的四个字节,存储了执行操作前的时间戳。   事件长度: Buf[9]开始的四个字节构成的整数,可以使用如下的方式来进行整数转换: #define UCHAR(ptr) [...]

动态实时跟踪你的java程序

2011年8月15日 由 聚石 没有评论 »

之前有写 基于AOP的日志调试 讨论一种跟踪Java程序的方法, 但不是很完美.后来发现了 Btrace , 由于它借助动态字节码注入技术 , 实现优雅且功能强大. 只不过, 用起来总是磕磕绊绊的, 时常为了跟踪某个问题, 却花了大把的时间调试Btrace的脚本. 为此, 我尝试将几种跟踪模式固化成脚本模板, 待用的时候去调整一下正则表达式之类的. 跟踪过程往往是假设与验证的螺旋迭代过程, 反复的用BTrace跟踪目标进程, 总有那么几次莫名其妙的不可用, 最后不得不重启目标进程. 若真是线上不能停的服务, 我想这种方式还是不靠谱啊. 为此, 据决定自己的搞个用起来简单, 又能良好支持反复跟踪而不用重启目标进程的工具. AOP AOP是Btrace, jip1等众多监测工具的核心思想, 用一段代码最容易说明: public void say(String words){ Trace.enter(); System.out.println(words); Trace.exit(); } 如上, Trace.enter() 和 Trace.exit() 将say(words)内的代码环抱起来, 对方法进出的进行切面的处理, 便可获取运行时的上下文, 如: 调用栈 当前线程 时间消耗 参数与返回值 当前实例状态 实现的选择 实现切面的方式, 我知道的有以下几种: 代理(装饰器)模式 设计模式中装饰器模式和代理模式, 尽管解决的问题域不同, 代码实现是非常相似,

MapR初体验

2011年8月7日 由 tuhai 没有评论 »

一、MapR是什么?

MapR是MapR Technologies, Inc的一个产品,号称下一代Hadoop,使Hadoop变为一个速度更快、可靠性更高、更易于管理、使用更加方便的分布式计算服务和存储平台,同时性能也不断提高。它将极大的扩大了Hadoop的使用范围和方式。它包含了开源社区的许多流行的工具和功能,例如Hbase、Hive。它还100%和Apache Hadoop的API兼容。它能够为客户节约一半的硬件资源消耗,使更多的组织能够利用海量数据分析的力量提高竞争优势。目前有两个版本,M3和M5,其中M3是免费的,M5为收费版,有试用期。具体功能差别见:http://www.mapr.com/products/mapr-editions.html。