目的
mysqlbinlog在分析mysql的binlog日志时,有时需要针对某个表的操作进行分析。但是这个表属于“冷数据”,操作记录相对较少,而其他表操作往往很频繁,binlog日志量特别大。尤其是当binlog的模式设置为ROW时,情况就更加严重了,往往如大海捞针。为了提高获取binlog日志的有效性,对mysqlbinlog功能进行扩展,增加table参数,分析指定数据库的表操作记录。
实现
以下实现基于MySQL 5.5.18源码,实现思路:参考--database参数的逻辑;修改原则:尽量少的变更MySQL源码,尽可能的优雅实现。
1、增加全局变量
首先增加两个全局变量,用于存储table参数的状态和table的值,具体如下所示:
/* One table to filter out (Added by wangheng, email to wangheng.wh@alibaba-inc.com.).*/
staticbool one_table=0;
staticchar* table_name = 0;
2、增加过滤函数
过滤函数主要是根据one_table状态和table的值,比较当前事件涉及的表是否需要获取。具体如下所示:
/*
* Check the given table should be filtered out, according to the --table=X option
* @param
* log_tbname: Name of table.
* @return
<