gpt4 book ai didi

mysql - 是否可以停止非复制数据库破坏复制的 mysql 错误?

转载 作者:行者123 更新时间:2023-11-29 06:34:22 24 4
gpt4 key购买 nike

我有点惊讶地看到一个mysql slave显示由于复制错误而停止了复制。它显示的错误来自主服务器,但发生在未复制的数据库上。

一个大师在 [mysqld] 部分的 /etc/my.cnf 中有当前配置:

binlog-do-db=some_db_1
binlog-do-db=some_db_2
binlog-do-db=some_db_3

在从站上,这些数据库被毫无问题地复制。我们使用的复制类型是 MIXED。然而,停止复制的从站上的错误是与另一个数据库相关的语句:

Last_SQL_Error: Error 'Table 'some_db_4.some_table' doesn't exist' on query.

我认为这是因为它是用 schema.table 语法引用的,而不是用 use 语句引用的,但是有没有办法阻止这种情况发生?如果我运行以下命令,我说的对吗?

USE some_db_2;
UPDATE some_table SET some_column = 1 WHERE some_column = 0;
USE some_db_4;
UPDATE some_table SET some_column = 2 WHERE some_column = 1;

那么binlog中只会出现前两行?鉴于:

UPDATE some_db_2.some_table SET some_column = 1 WHERE some_column = 0;
UPDATE some_db_2.some_table SET some_column = 2 WHERE some_column = 1;

两者都会出现在binlog中?有可能停止吗?

最佳答案

复制过滤的工作原理是在您运行查询时过滤默认数据库,而不是受查询影响的数据库。

因此,如果您使用限定的表名、更改 some_db_4 中的数据,而您当前的默认数据库不是该数据库,那么您可能会遇到麻烦。

如果您执行跨数据库 DML,则存在类似的问题,例如从 some_db_4 中的表中的 SELECT 插入 some_db_3 中的表,而从属服务器上不存在。

所以你的问题的答案是肯定的,如果你小心地在 master 上执行 DML,当你的默认数据库是受语句影响的数据库时,你可以避免这个错误。

关于mysql - 是否可以停止非复制数据库破坏复制的 mysql 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com