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

标签 mysql database-replication

我有点惊讶地看到一个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/

相关文章:

mysql - 更新和显示 MySQL 数据库的评级

database - Bucardo 添加同步以复制数据

php - 在基于读写的服务器集上构建 Web 应用程序

Azure 数据从 Azure Db 同步到 Azure DWH

java - 有没有办法在 Quartz Scheduler 中拆分读/写查询以使用 mysql 主从复制?

php - MySQL 表的字段(结构)是否具有唯一 ID?

php - 仅显示 Mysql 数据库中的月份

redis - Redis是否支持强一致性

mysql - 在 Spring Boot 中动态向 MySQL 添加新列

MySQL:外键约束在 InnoDB 中被忽略