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