Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全数据库同步mysql_Mysql_Database_Synchronization - Fatal编程技术网

安全数据库同步mysql

安全数据库同步mysql,mysql,database,synchronization,Mysql,Database,Synchronization,我们有一个中央服务器,它只接收来自其他服务器的数据(目前,中央服务器将仅用于显示报告和图形) 因此,我们在不同的位置(不在同一网络上)安装了多个数据写入设备(小型服务器) 我们需要在每台服务器上获取添加/修改/删除的数据,并用这些数据更新中央服务器 我们已经看了SymmetricDS,它 我们想做的是,在数据库中为尚未同步的每一行(添加/修改/删除)设置一个标志,并为设置了标志的每一行创建一个带有REPLACE-INTO的查询 这是好办法吗?或者,你有其他的想法吗 更新: 并非所有客户端都可以访

我们有一个中央服务器,它只接收来自其他服务器的数据(目前,中央服务器将仅用于显示报告和图形)

因此,我们在不同的位置(不在同一网络上)安装了多个数据写入设备(小型服务器)

我们需要在每台服务器上获取添加/修改/删除的数据,并用这些数据更新中央服务器

我们已经看了SymmetricDS,它

我们想做的是,在数据库中为尚未同步的每一行(添加/修改/删除)设置一个标志,并为设置了标志的每一行创建一个带有REPLACE-INTO的查询

这是好办法吗?或者,你有其他的想法吗

更新:


并非所有客户端都可以访问internet连接。因此,这些服务器只有在安装了触发器之后才能进行同步。

我认为触发器在您的情况下工作得最好。除非您希望立即更新所有内容,否则您的解决方案将可以

我认为触发器在您的情况下工作得最好。除非您希望立即更新所有内容,否则您的解决方案将执行类似操作,以下是一些提示

  • 考虑使用UUID作为标识符,这将允许您合并来自多个源的数据而不发生冲突,如果这不可能,则自动增量具有偏移量和增量量,因此对于iInstance,您可以具有100的增量(如果小于100个系统),并且db 1从偏移量1开始,db 2从偏移量2开始,至少您的所有异地数据库将具有不同的id
  • 使用软删除,在每个表上都有“is_deleted”标志,只需将这些从查询或结果中排除即可
  • 确保要同步的任何表都有一个“已更新”字段,该字段在更新当前时间戳时使用
    TIMESTAMP DEFAULT 0创建
  • 导入程序将执行类似的操作
    • 备份远程表
    • 还原到临时数据库
    • 从临时数据库获取最大('udpated')时间,将其保存以供下次导入
    • 沿着以下行运行替换
      replace INTO currentdb.mytbl选择tempdb.mytbl WHERE updated>{previous max(updated)}

我使用这个过程来保持国际定位数据库的最新状态,很少出现问题。

做了类似的事情后,这里有一些提示

  • 考虑使用UUID作为标识符,这将允许您合并来自多个源的数据而不发生冲突,如果这不可能,则自动增量具有偏移量和增量量,因此对于iInstance,您可以具有100的增量(如果小于100个系统),并且db 1从偏移量1开始,db 2从偏移量2开始,至少您的所有异地数据库将具有不同的id
  • 使用软删除,在每个表上都有“is_deleted”标志,只需将这些从查询或结果中排除即可
  • 确保要同步的任何表都有一个“已更新”字段,该字段在更新当前时间戳时使用
    TIMESTAMP DEFAULT 0创建
  • 导入程序将执行类似的操作
    • 备份远程表
    • 还原到临时数据库
    • 从临时数据库获取最大('udpated')时间,将其保存以供下次导入
    • 沿着以下行运行替换
      replace INTO currentdb.mytbl选择tempdb.mytbl WHERE updated>{previous max(updated)}

我使用此过程使国际定位的数据库保持最新,但问题很少。

我忘了提到这一点:并非所有客户端都可以访问internet连接。因此,这些服务器在安装之前不会同步。如果我们没有连接到中央服务器数据库,它会与触发器一起工作,还是会崩溃?据我所知,触发器会在查询之前或之后当场执行。我忘了提到这一点:不是所有客户端都可以访问internet连接。因此,这些服务器在安装之前不会同步。如果我们没有连接到中央服务器数据库,它会与触发器一起工作还是会崩溃?据我所知,触发器会在查询之前或之后当场执行。我已经有了前两点,但我不确定你最后一点的意思。远程表是什么?您在中央服务器上执行此部分吗?如果是,这意味着您必须从中央服务器连接到所有不同的位置?我已经有了前两点,但我不确定您最后一点的意思。远程表是什么?您在中央服务器上执行此部分吗?如果是,这意味着您必须从中央服务器连接到所有不同的位置?