【问题标题】:How to synchronize two MySQL databases which have different schemes?如何同步两个不同方案的 MySQL 数据库?
【发布时间】:2023-03-25 23:35:01
【问题描述】:

我有两个完全不同的 MySQL 数据库,它们都有自己的用户表方案。我想(实时)同步用户表,因此,当将用户添加到任一数据库时,另一个应相应更新。我的问题是,是否可以进行这种同步?如果是,那么有效的方法/方法是什么?

【问题讨论】:

    标签: mysql sql database synchronization data-synchronization


    【解决方案1】:

    如果您希望在插入/更新行时在数据库中发生这种情况,那么这听起来像是 TRIGGER 的候选者。这将允许您编写代码,以便每当表 A 发生更改时,您可以自动对表 B 进行“镜像”更改。请注意,因为您将有两个方向的触发器,所以您确定一个告诉插入/更新来自另一个表的触发器的方式,并且您不会陷入无限循环。

    【讨论】:

    • 感谢您警告我有关无限循环的信息。 :) 如果提出的其他方法效果不佳,我会尝试触发。
    【解决方案2】:

    是的,这是可能的,但由于您的架构不同,最好的方法就是手动完成;在更新其中一个数据库的代码中,只需让它适当地更新另一个数据库。这是非常必要的,因为您的模式不同;您正在有效地实现在更新时调用的手动映射器。

    还有其他方法可以做到,但这是最简单的方法,而且非常有效。

    编辑:好的,其他方法:有一个常规作业(cronjob 或类似的),它根据自上次查询以来的更新查询一个表,并将这些更新传播到第二个表;然而,这种方法存在潜在的滞后性。或者,您可以根据每个用户表的触发器做一些事情,但我建议避免使用这种方法,因为它会引入一些潜在的严重执行时间增加,具体取决于触发器的实现方式。但我仍然想说最简单的方法是修改用户表更新代码以修改两个表而不是一个。

    【讨论】:

    • 由于系统更新问题,我们不想更改核心实现。那么,在这种情况下还有哪些其他方法?你能提供一些其他的同步方式吗?
    • 这是什么意思? '改变核心实现'。如果您必须是外部的,则设置一些 cron 作业以在计时器上进行映射。
    • 表示系统(例如CMS或类似系统)在系统内核中实现了插入,如果我们更改它,我们在更新系统时可能会出现一些问题(例如当新版本发布时) .
    • 无论如何,我会尝试调查如果我更改插入代码会发生什么。如果不可能,我会尝试常规工作。如果两者都不起作用,将尝试触发器。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多