MySQL Binlog 解析工具 Maxwell 详解 (4)

Maxwell 可以通过 --filter 配置项来指定过滤规则,通过 exclude 排除,通过 include 包含,值可以为具体的数据库、数据表、数据列,甚至用 Javascript 来定义复杂的过滤规则;可以用正则表达式描述,有几个来自官网的例子

# 仅匹配foodb数据库的tbl表和所有table_数字的表 --filter='exclude: foodb.*, include: foodb.tbl, include: foodb./table_\d+/' # 排除所有库所有表,仅匹配db1数据库 --filter = 'exclude: *.*, include: db1.*' # 排除含db.tbl.col列值为reject的所有更新 --filter = 'exclude: db.tbl.col = reject' # 排除任何包含col_a列的更新 --filter = 'exclude: *.*.col_a = *' # blacklist 黑名单,完全排除bad_db数据库,若要恢复,必须删除maxwell库 --filter = 'blacklist: bad_db.*' 数据初始化

Maxwell 启动后将从maxwell库中获取上一次停止时position,从该断点处开始读取binlog。如果binlog已经清除了,那么怎样可以通过maxwell把整张表都复制出来呢?也就是数据初始化该怎么做?

对整张表进行操作,人为地产生binlog?譬如找一个不影响业务的字段譬如update_time,然后加一秒,再减一秒?

update test set update_time = DATE_ADD(update_time,intever 1 second); update test set update_time = DATE_ADD(update_time,intever -1 second);

这样明显存在几个大问题:

不存在一个不重要的字段怎么办?每个字段都很重要,不能随便地修改!

如果整张表很大,修改的过程耗时很长,影响了业务!

将产生大量非业务的binlog!

针对数据初始化的问题,Maxwell 提供了一个命令工具 maxwell-bootstrap 帮助我们完成数据初始化,maxwell-bootstrap 是基于 SELECT * FROM table 的方式进行全量数据初始化,不会产生多余的binlog!

这个工具有下面这些参数:

参数 说明
--log_level LOG_LEVEL   日志级别(DEBUG, INFO, WARN or ERROR)  
--user USER   mysql 用户名  
--password PASSWORD   mysql 密码  
--host HOST   mysql 地址  
--port PORT   mysql 端口  
--database DATABASE   要bootstrap的表所在的数据库  
--table TABLE   要引导的表  
--where WHERE_CLAUSE   设置过滤条件  
--client_id CLIENT_ID   指定执行引导操作的Maxwell实例  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjggp.html