首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文档MariaDB -> mysqlbinlog中的错误:`--重写-db``和`--数据库

文档MariaDB -> mysqlbinlog中的错误:`--重写-db``和`--数据库
EN

Database Administration用户
提问于 2022-11-22 11:19:32
回答 1查看 86关注 0票数 3

在mysqlbinlog实用程序文档中,--rewrite-db=name选项有以下解释

过滤(例如-- database =name )是在执行数据库重写之后发生的。

但是,我的测试表明,使用--database选项进行筛选是在应用--rewrite-db选项之前进行的。

我以以下方式再现了这个问题:我创建了一个数据库db1,其中包含一个包含一个列c1的表t1。Binlog格式= ROW

代码语言:javascript
复制
CREATE DATABASE db1;
use db1;
CREATE TABLE t1 (c1 varchar(255));

然后执行以下命令:

代码语言:javascript
复制
FLUSH LOGS;

插入到桌子上

代码语言:javascript
复制
INSERT INTO t1 (c1) VALUES (`row in db1.t1`);

再次执行命令

代码语言:javascript
复制
FLUSH LOGS;

我使用下面的命令( --vv参数解密命令)检查从绑定日志中提取的内容:

代码语言:javascript
复制
mysqlbinlog mysql-bin.000033 --rewrite-db='db1->new_db_name' --database='new_db_name' -vv

只输出注释,不输出INSERT命令。但是,如果我在db1参数中指定名称--database,则将显示INSERT命令:

代码语言:javascript
复制
mysqlbinlog mysql-bin.000033 --rewrite-db='db1->new_db_name' --database='db1' -vv

产出:

代码语言:javascript
复制
...
...
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)测试了类似的场景,它的工作原理是在替换之后运行过滤。

我是否正确地理解这是文档中的一个错误?还是我误会了什么?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-11-22 23:41:58

从代码来看,--database 选项被应用 to QUERY_EVENT/QUERY_COMPRESSED_EVENT 就在之前 打印_使用_语句使用--rewrite-db

对于TABLE_MAP_EVENT--database应用--rewrite-db应用TABLE_MAP_EVENT

所以你是完全正确的,这是一个文档错误。如果您想要更改它,那么MariaDB的KB是可编辑的。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/320055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档