在mysqlbinlog实用程序文档中,--rewrite-db=name选项有以下解释
过滤(例如-- database =name )是在执行数据库重写之后发生的。
但是,我的测试表明,使用--database选项进行筛选是在应用--rewrite-db选项之前进行的。
我以以下方式再现了这个问题:我创建了一个数据库db1,其中包含一个包含一个列c1的表t1。Binlog格式= ROW。
CREATE DATABASE db1;
use db1;
CREATE TABLE t1 (c1 varchar(255));然后执行以下命令:
FLUSH LOGS;插入到桌子上
INSERT INTO t1 (c1) VALUES (`row in db1.t1`);再次执行命令
FLUSH LOGS;我使用下面的命令( --vv参数解密命令)检查从绑定日志中提取的内容:
mysqlbinlog mysql-bin.000033 --rewrite-db='db1->new_db_name' --database='new_db_name' -vv只输出注释,不输出INSERT命令。但是,如果我在db1参数中指定名称--database,则将显示INSERT命令:
mysqlbinlog mysql-bin.000033 --rewrite-db='db1->new_db_name' --database='db1' -vv产出:
...
...
BINLOG '
eI98YxMBAAAANgAAABwCAAAAADMAAAAAAAEAC25ld19kYl9uYW1lAAJ0MQABDwL8AwFyNVlH
eI98YxcBAAAAMQAAAE0CAAAAADMAAAAAAAEAAf/+DQByb3cgaW4gZGIxLnQxmq6ESw==
'/*!*/;
### INSERT INTO `new_db_name`.`t1`
### SET
### @1='row in db1.t1' /* VARSTRING(1020) meta=1020 nullable=1 is_null=0 */
...
...因此,mysqlbinlog首先使用--database参数过滤binlog文件,然后使用--rewrite-db参数进行替换,这与文档相矛盾。
我为MySQL(没有MariaDB)测试了类似的场景,它的工作原理是在替换之后运行过滤。
我是否正确地理解这是文档中的一个错误?还是我误会了什么?
https://dba.stackexchange.com/questions/320055
复制相似问题