我在 MySQL 5.0.45 上运行了几个数据库,并试图让我的旧数据库与修改后的模式同步,这样我就可以同时运行这两个数据库。我通过向新数据库添加触发器来做到这一点,但我遇到了复制问题。我的设置如下。
服务器“主”
- 数据库“legacydb”,复制到服务器“slave”。
- 数据库“newdb”,具有更新“legacydb”且没有复制的触发器。
服务器“奴隶”
- 数据库“legacydb”
我对“newdb”的更新运行良好,并触发了我的触发器。他们在“主”服务器上更新“legacydb”。但是,这些更改不会复制到从属服务器。MySQL 文档说,为简单起见,复制在"SELECT DATABASE();"
决定复制哪些查询时会查看当前数据库上下文(例如),而不是查看查询的产品。我的触发器是从数据库“newdb”的上下文中运行的,因此复制会忽略更新。
我尝试将更新语句移动到“legacydb”中的存储过程。当我连接到“master”并手动运行时,这工作正常(即数据复制到从属)"USE newdb; CALL legacydb.do_update('Foobar', 1, 2, 3, 4);"
。但是,当从触发器调用此过程时,它不会复制。
到目前为止,我对如何解决此问题的想法是以下之一。
强制触发器设置一个新的当前数据库。这将是最简单的,但我认为这是不可能的。这是我希望通过存储过程实现的。
复制两个数据库,并在主从中都有触发器。这是可能的,但设置起来很痛苦。
无论当前数据库上下文如何,强制复制获取对“legacydb”的所有更改。
如果复制运行的级别太高,它甚至不会看到我的触发器运行的任何更新,在这种情况下,再多的黑客攻击也无法实现我想要的。
任何有关如何实现这一目标的帮助将不胜感激。