我有一个带有单个数据库的活动主/从复制(Mariadb 10.2)(参见场景 1)
我决定添加 IMPORT 数据库以填充 MASTER 数据库,如方案 2 中所述。但是,SLAVE 实例关闭并且“未知数据库导入”错误被追溯。
为了克服这个问题,我在 SLAVE 服务器(导入)中创建了一个同名的数据库,并且错误消失了(参见场景 3)。
但是,创建的数据库(从属导入)没有表(故意),因此为了确保数据被插入到我测试的从属中,我在MASTER 数据库中创建了一个测试表,并且我确实从Master 的导入数据库中插入了数据。
结果,即使从库的导入库没有表,从库中的数据也很明显是可用的。
所以基本上,我们只需要在从属部分中使用相同的数据库名称就可以在不需要表的情况下工作。
您能否向我解释一下它是如何工作的?如果它是基于行的格式,为什么我们需要在从站中使用相同的数据库?
这里发生了几件事,您需要查看主服务器和从服务器上的配置,以确定主服务器上设置了以下任何选项的位置:
以及是否在从站上设置了以下任何一项:
您应该注意的是,重要的是您正在执行数据库/表创建的连接上的当前数据库,因为即使在基于行的 binlog 中,DDL 仍被记录为语句。
所以如果你这样做:
这不会被复制。
您正在寻找的解决方案是:
1)在主服务器上,设置你的 binlog_ignore_db = ignored_import_database
2)确保数据导入过程在执行数据加载时连接到ignore_import_database,这样任何DDL都不会通过,并确保导入有效负载内没有数据库切换(“使用数据库some_unignored_db”) .