目的

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

*     0 : Skip.

*     N: Filtered out.

* @author:  wangheng

* @email  : wangheng.wh@alibaba-inc.com

*/

staticbool shall_skip_table(const char *log_tbname)

{

return one_table &&

(log_tbname != NULL) &&

strcmp(log_tbname, table_name);

}

3、增加调用逻辑

分析发现,有表信息的Log_event结构有:Table_map_log_event和Create_file_log_event两个结构,其中Table_map_log_event仅在ROW模式下有效,Create_file_log_event是在Load data时调用。为了尽快能少的减少修改引入的新问题,逻辑处理仅对这两个部分增加过滤函数的逻辑调用。具体如下:

case CREATE_FILE_EVENT:

{

Create_file_log_event* ce= (Create_file_log_event*)ev;

if (shall_skip_database(ce->db)

/* Filtered out the events of given table. (Added by wangheng, email to wangheng.wh@alibaba-inc.com) */

|| shall_skip_table(ce->table_name))

……

case TABLE_MAP_EVENT:

{

Table_map_log_event *map= ((Table_map_log_event *)ev);

if (shall_skip_database(map->get_db_name())

/* Filtered out the events of given table.(Added by wangheng, email to wangheng.wh@alibaba-inc.com.). */

|| shall_skip_table(map->get_table_name()))

4、增加输入参数选项

在my_long_options参数选项中增加输入参数--table/-T,用于设置过滤的表名。具体如下:

/*Add the -T/--table option. (Added by wangheng, email to wangheng.wh@alibaba-inc.com.)*/

{"table", 'T', "List entries for just this table in given database of -d/--database option. (row mode only).",

&table_name, &table_name, 0, GET_STR_ALLOC, REQUIRED_ARG,

0, 0, 0, 0, 0, 0},

5、释放参数变量

因为table_name参数选项,在处理时分配了内存空间,在cleanup()函数中,释放table_name变量。具体如下:

/* Free the table name. (Added by wangheng, email to wangheng.wh@alibaba-inc.com.)*/

my_free(table_name);

6、设置标记变量

在table参数设置后,通过one_table变量标记当前有表需要过滤,从而在shall_skip_table()时过滤表操作记录。需要在get_one_option()函数中,设置one_table变量。具体如下:

/* Set the table filter flag. (Added by wangheng, email to wangheng.wh@alibaba-inc.com.)*/

case't':

one_table = 1;

break;

以上过程,尽可能少的对MySQL源码进行修改,扩展部分尽可能保证不影响正常的处理逻辑。

PATCH

为了方便使用mysqlbinlog的扩展功能,基于MySQL 5.5.18官方源码修改,patch发布在github上分享。

patch发布在:

相关的说明文档:

结论:

通过扩展mysqlbinlog功能,增加-T/--table参数,设置过滤数据表的操作记录,提高mysqlbinlog获取数据的有效性,减少分析数据的范围。然而,由于Query_log_event事件类型中没有提供tables信息,导致binlog在MIX和STATEMENT模式下,不能尽可能的过滤有效操作记录。

mysql log table_mysqlbinlog功能扩展--table参数相关推荐

  1. 8核32g mysql性能_MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  2. 数据库 - mysql内置功能

    mysql内置功能: 1.视图 2.触发器 3.存储过程 4.事务 5.函数 一.视图 介绍: 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名], 用户使用时只需 ...

  3. mysql 5.7主从延迟 相关参数配置

    一直以来,都是听到 mysql 5.7已 消除了延迟,但我们测试环境主从一直存在延迟. 找了很多原因,但一直不理想,直接到找参数:sync_relay_log ,在讨论主从延迟时,很少会说到这个参数. ...

  4. 基于开源蜜罐的实践与功能扩展

    0×00 前言 具有一定规模的公司都会有自己的机房,当网络规模和硬件系统到达一定程度,就需要跟进各种安全预警防护手段,而蜜罐系统就是一种常见的防护手段之一,蜜罐主要是通过在网络环境当中,用虚拟各种真实 ...

  5. MySQL中的空间扩展

    目录 19.1. 前言19.2. OpenGIS几何模型 19.2.1. Geometry类的层次19.2.2. 类Geometry19.2.3. 类Point19.2.4. 类Curve19.2.5 ...

  6. MySQL 8.0 首个自适应参数横空出世

    |什么是自适应参数 MySQL8.0推出一个号称可以自适应服务器的参数,保证在各种不同的服务器.虚拟机.容器下自动适配服务器资源,让我们一起来看看到底它能做到什么地步. |自适应参数是如何设置和适应变 ...

  7. php mysql log文件,mysql log文件【读书笔记1】_MySQL

    bitsCN.com mysql log文件[读书笔记1] 一,错误日志文件:Error.log 记录Mysql Server运行过程所有较为严重的警告或错误信息,以及Mysql Server启动和关 ...

  8. mysql scws_php利用scws实现mysql全文搜索功能的方法,_PHP教程

    php利用scws实现mysql全文搜索功能的方法, 本文实例讲述了php利用scws实现mysql全文搜索功能的方法.分享给大家供大家参考.具体方法如下: scws这样的中文分词插件比较不错,简单的 ...

  9. 腾讯基于 Flink SQL 的功能扩展与深度优化实践

    简介:本文由腾讯高级工程师杜立分享,主要介绍腾讯实时计算平台针对 Flink SQL 所做的优化. 整理:戴季国(Flink 社区志愿者) 校对:苗文婷(Flink 社区志愿者) 摘要:本文由腾讯高级 ...

最新文章

  1. jetty的Form too large异常解决方案
  2. 柯美smb扫描出现服务器连接错误_柯尼卡美能达363,正确设置了SMB扫描,文件夹也共享了,但扫描后,显示错误为 登录错误,是为什么...
  3. 实验八 《Coderxiaoban团队》团队作业4:基于原型的团队项目需求调研与分析
  4. 程序员面试题精选100题(05)-查找最小的k个元素[算法]
  5. ASP.NET 常用验证
  6. 如何查找UI5应用对应在ABAP Netweaver服务器上的BSP应用名称
  7. 自定义repeater带分页功能的DataGrid(仿PetShop)
  8. ASP.NET Core 3.0 gRPC 双向流
  9. 简单阐述下OC中UIImage三种创建方式~~~
  10. 《Python Cookbook 3rd》笔记(4.14):展开嵌套的序列
  11. Interesting Finds: 2008.03.24
  12. Oracle 中国研发中心裁员已成定局,云时代下一个是谁?
  13. Sharding-JDBC水平分表(最终测试)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记009
  14. 医疗系统流程软件测试用例,医疗管理系统案例测试用例.doc
  15. 全球及中国出版行业发展动态与运营盈利前景分析报告2022版
  16. Echarts柱状图属性设置大全
  17. MSDOS设置代码页
  18. 流媒体服务器开源方案调研
  19. CVPR2021 | CVPR2021最全整理,CVPR2021下载链接,CVPR2021全部论文代码
  20. 010-win10任务栏假死—重启“Windows资源管理器”。

热门文章

  1. java如何做全局缓存_传智播客JNI第七讲 – JNI中的全局引用/局部引用/弱全局引用、缓存jfieldID和jmethodID的两种方式...
  2. wordpress漏洞_WordPress XSS漏洞可能导致远程执行代码(RCE)
  3. mysql存储过程_Mysql存储过程
  4. Unity 动画属性
  5. 【转】winform回车变为tab
  6. 005-JQuery之CSS
  7. 第一次写,python爬虫图片,操作excel。
  8. Zabbix的安装(源码安装)
  9. Integer 中的缓存类IntegerCache
  10. hadoop深入研究:(五)——Archives