将主数据库复制到不同的从属服务器

Wes*_*nal 7 php mysql phpmyadmin database-replication

我有一个主数据库,它将是由不同学校组成的云服务器.

仪表板类型,包含每所学校的详细信息.可以编辑他们的信息和其他数据.

现在,这些学校被部署到相应的学校位置,这将是本地服务器.

仪表板类型,只能编辑本地服务器中部署的特定学校.可以编辑他们的信息和其他数据.

现在我想要发生的是,cloud to local server如果某些事情发生了变化,就可以同步相应的学校.这也适用local to cloud server.

注意:如果您曾经尝试使用Evernote,可以在您正在使用的任何设备上编辑备注信息,并且在您拥有互联网或手动点击同步时仍能够同步.

当本地服务器没有互联网连接并在学校编辑了一些数据.一旦互联网启动,本地和云服务器的数据应该同步.

这就是我追求的逻辑.

在此输入图像描述

有人会为我开始从哪里开始吗?我想不出任何适合我问题的解决方案.

我还想到使用php来遍历整个表格以及与当前日期和时间相对应的数据.但我知道那会很糟糕.

编辑:我删除了关于此事的其他SO问题的参考/帖子.

我找到的应用程序挂钩

  • Evernote的
  • Todoist

服务器:

  • 本地服务器计算机:Windows 10(部署在学校)
  • 云服务器:可能是一些使用的专用主机 phpmyadmin

不要挑剔,但希望答案是你正在与一个新手掌握到奴隶数据库进程.我没有这方面的经验.

K S*_*ett 3

当我们过去这样做时,我们会:

  1. 确保我们想要同步的每个表都有已创建的日期时间列;修改的; & 已删除。它们还有一个布尔 isDeleted 列(因此我们不会物理删除记录,而是将其标记为 true 并在查询中忽略它)。这意味着我们可以查询自特定时间以来已删除的任何记录,并返回这些已删除 ID 的数组。
  2. 在每个数据库(主数据库和从数据库)中创建一个表来存储上次成功同步的日期时间。在主表中,该表存储多个记录:每个学校 1 条记录,但在从属表中,它只需要 1 条记录 - 上次与主表同步的时间。

在你的情况下,每个奴隶经常会:

  1. 调用 master 的 Web 服务(URL),假设名为“helloMaster”。它将传递学校名称(或某些特定标识符)、上次与主站成功同步的时间、身份验证详细信息(为了安全),并期望主站响应自该日期以来主站是否有学校的任何更新假如。实际上,这里的重点只是寻找一个确认,表明主机可用并正在监听(即互联网仍然存在)。

  2. 然后,从站将调用另一个 Web 服务,假设称为“sendUpdates”。它将再次传递学校名称、上次成功同步(加上安全身份验证详细信息)以及自上次同步以来任何添加、更新和删除记录的三个数组。主人只要确认收货即可。如果收到确认,则从设备将移至步骤 3,否则从设备将在暂停一段时间后再次尝试步骤 1。所以现在主站已经收到了从站的更新。注意:如果与待处理的从属更新发生冲突,则由主控决定如何合并任何记录。

  3. 然后从站调用一个网络服务,比如说“getUpdates”。它传递学校名称、上次成功同步、安全身份验证详细信息,然后主服务器返回三个数组,以获取从服务器希望将其应用到其数据库的任何添加、更新和删除的记录。

  4. 最后,一旦从站尝试更新其记录,它将通过另一个网络服务(例如“updateStatus”)通知主站成功/失败。如果成功,则主服务器将返回一个新的同步日期供从服务器存储(这将与主服务器在其表中存储的日期完全匹配)。如果失败,则错误将记录在主服务器中,并且我们在暂停后返回到步骤 1。

我遗漏了一些有关错误处理、在所有设备上获取准确时间(可能涉及不同时区)以及其他一些细节的细节,但这就是要点。

我可能会在更多考虑后进行改进(或者其他人可能会编辑我的帖子)。

希望至少有帮助。