微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL 8.0 复制“未知数据库”错误导致复制停止

如何解决MySQL 8.0 复制“未知数据库”错误导致复制停止

我在复制两台 MysqL 服务器时遇到问题。由于另一个至少需要版本 8 的依赖关系,主站正在运行 MysqL 5.6,而从站正在运行 MysqL 8.0。为了这个例子,我只复制一个数据库,为了“my_db”。然而,在一天中的某个时间点,master 运行备份并尝试更新数据库“my_db_backups”。我没有复制这个数据库,我只想忽略副本上的这些 sql 命令。我在我的 MysqL.conf 文件中明确忽略了这个数据库

replicate-ignore-db=my_db_backups

然而,当我重新启动 MysqL 服务器时,我仍然看到一个错误

Last_sql_Errno: 1049
Last_sql_Error: Error 'UnkNown database 'my_db_backups'' on query. Default database: 'my_db'. Query: 'INSERT INTO my_db.`table_1` SELECT * FROM my_db_backups.`2021_01_04_17_36_22_table_1`'

我读过的一切似乎都表明设置 replicate-do-db 应该只执行与该数据库相关的查询。另外添加一个显式忽略 replicate-ignore-db,我希望也能正常工作,但我没有运气。

我完整的 MysqL.conf 如下所示:

[MysqLd]
server-id=20
lower_case_table_names=1
updatable_views_with_limit=1
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
replicate-ignore-db=my_db_backups
replicate-ignore-table=my_db.MysqL_8_incompatible_view_1
replicate-ignore-table=my_db.MysqL_8_incompatible_view_2
replicate-ignore-table=my_db.MysqL_8_incompatible_view_3
replicate-ignore-table=my_db.MysqL_8_incompatible_view_4
replicate-wild-do-table=my_db.%
replicate-do-db=my_db

我尝试了这些复制操作和复制忽略操作配置的所有组合,我尝试添加

replicate-wild-ignore-table=my_db_backups.%

删除

replicate-ignore-db=my_db_backups

我已经尝试将它们都放在 conf 文件中。似乎没有任何效果

我知道我可以明确跳过错误 1049,这可能是我最终要做的。我只是想弄清楚为什么其他配置没有任何效果并且不能放手。

任何帮助将不胜感激!

解决方法

我注意到产生错误的语句实际上并未写入 my_db_backups 中的表。它正在将 INSERT 复制到 my_db 中的表。

INSERT INTO my_db.`table_1` SELECT * FROM my_db_backups.`2021_01_04_17_36_22_table_1`

该语句正在从 my_db_backups 中的表中读取,它在副本上没有找到。

因此插入到 my_db.table_1 的语句将在副本上执行,因为默认数据库 my_db 没有被忽略。

您也可以通过在主服务器上使用基于 ROW 的二进制日志来解决此问题,因此它从副本上不存在的表中读取并不重要。 INSERT 会在 master 上生成一个行图像,该表确实存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。