【问题标题】:MySQL Queries from the MySQL Workbench won't replicateMySQL Workbench 中的 MySQL 查询不会复制
【发布时间】:2015-01-08 01:04:49
【问题描述】:

我正准备对我管理的数据库进行一些更改,但不确定我想要做的事情是否会正确复制,所以我在测试环境中运行了一些测试,结果证明它们会,但前提是我不这样做从 MySQL Workbench 运行命令。

例如,如果有一个名为 db_test 的数据库和一个名为 test_a 的数据库中只有一个列 id 的表,我尝试从工作台执行此操作:INSERT INTO db_test.test_a (id) VALUES (114);

我在主数据库中获得了预期的行,但它从未复制到从属数据库。

当我执行SHOW SLAVE STATUS 时 - 它显示一切都很好,并且是最新的。如果我然后使用不同的 SQL 客户端(例如 SequelPro)并以相同的方式插入另一行(但显然是不同的 id),它将显示在主服务器中并复制到从服务器。

这让我感到困惑和担忧,因为我想了解其中的区别,这样我就可以避免执行无法复制的操作。

【问题讨论】:

  • 你确定你已经连接到master了吗?
  • 是的,我仔细检查了。
  • 复制完全独立于任何访问服务器的客户端。将 MySQL Workbench 插入的数据与其他客户端插入的数据区别对待是绝对没有意义的。肯定还有其他问题。
  • 您是否在从属设备上使用了复制过滤(尤其是--replicate-do-db)?
  • @MikeLischke 我完全同意你的看法,但我也知道两个客户端可以根据客户端的隐式行为表现不同。所以我想知道这两个客户中的一个是否正在做一些我不知道的事情。我需要知道,这样我才能确信我选择的方法会在 100% 的时间内复制。

标签: mysql mysql-workbench


【解决方案1】:

如果您在从服务器上设置了--replicate-do-db 以过滤数据库db_test 的复制,则复制将根据默认数据库进行过滤,因此请确保发出USE db_test。您的客户可能以不同的方式工作,或者您可能在客户之间发布不同的语句。

在从站上使用--replicate-do-db 设置为db_test,这将复制:

USE db_test;
INSERT INTO test_a (id) VALUES (114);

但这不会:

USE other_db;
INSERT INTO db_test.test_a (id) VALUES (114);

要让复制工作不受当前默认数据库的影响,请使用--replicate-wild-do-table 将数据库和表配置为复制或根本不过滤。

另外,请确保您已连接到主数据库服务器。

【讨论】:

  • 我没有看到正在设置replicate-do-db,但是这种行为是一致的,就好像它已经设置了一样,并且以USE db_text; 开头确实允许从工作台进行复制。所以我的猜测是,Sequel Pro 隐含地为我做一个USE db_text;,而 MySQL Workbench 不是。这似乎是一个合理的结论?感谢您的回复,我知道这种疯狂一定是有原因的。
  • 对此进行更多思考,当我在 UI 中选择数据库时,它会发出 USE db_name
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 2014-09-04
  • 2016-01-14
  • 1970-01-01
  • 2017-11-06
  • 2019-05-11
  • 2011-04-19
相关资源
最近更新 更多