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实例