首先,给出我的MySQL版本
SELECT VERSION();
5.7.25-log
mysqlbinlog
--database
--base64-output=DECODE-ROWS #如果截取出来的日志是为了SOURCE执行,不要添加这个参数
--verbose
--set-charset=utf8
--skip-gtids
--include-gtids='bec1f53c-61b9-11e9-8871-000c29d144c9:200-2302' #需要再次执行的GTID
--exclude-gtids='bec1f53c-61b9-11e9-8871-000c29d144c9:220' #需要过滤掉的GTID
--result-file=/var/log/mysql/dump.sql
重要参数说明
-
--skip-gtids
这里先给出官方文档中的说法Do not display any GTIDs in the output. This is needed when writing to a dump file from one or more binary logs containing GTIDs, as shown in this example: shell> mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sql shell> mysqlbinlog --skip-gtids binlog.000002 >> /tmp/dump.sql shell> mysql -u root -p -e "source /tmp/dump.sql" The use of this option is otherwise not normally recommended in production.
也就是说,除了上述用法,不建议在生产环境中使用这个参数。这个参数的作用可能是规避GTID的幂等性。经过试验,发现,如果没有加这个参数,截取出来的SQL二进制日志即使被
SOURCE
,也不会产生效果。另外,即使在sql_log_bin=1
时,如果没有加上这个参数,由于幂等性,二进制日志并不会真正执行,所以,并不会产生新的二进制日志记录。 --base64-output=DECODE-ROWS
如果加上这个参数,截取出来的日志虽然可以SOURCE成功,但是不会执行SQL。
那么,给出结论,如果是为了查看截取出来的日志,加上这个参数和--verbose
,如果是为了执行SQL,不要加这个参数。
遗留问题
-
--idempotent
Tell the MySQL Server to use idempotent mode while processing updates;
this causes suppression of any duplicate-key or key-not-found errors
that the server encounters in the current session while processing updates.
This option may prove useful whenever it is desirable or necessary to replay one or more binary logs to a MySQL Server which may not contain all of the data to which the logs refer.
The scope of effect for this option includes the current mysqlbinlog client and session only.怎么理解和使用?
加上
--database
就可以按照库来筛选,如何以表为精度进行筛选?