mysql - 将本地MySQL数据库同步到线上

标签 mysql database synchronization

我有两个 MySQL 数据库。一个在本地 PC 中,另一个在在线服务器中。现在我必须将本地数据库与在线数据库同步。我使用 curl 来做到这一点。有没有更好的方法可以做到这一点而不会丢失从本地数据库到在线数据库的任何数据?有任何关于完成同步过程的工具或库的建议吗?

enter image description here

在我的本地数据库中,我使用触发器来跟踪每个表的每次插入和更新。我们不会硬删除任何东西。同步表用于保存触发历史记录。这是我的“同步”表的屏幕截图。

同步表说明:

  1. id --> 同步表的主键
  2. table_name --> 发生操作(插入/更新)的表的名称
  3. pkey_column_name --> 表的主键容器列名(table_name)
  4. row_id --> 表的主键(table_name)
  5. 类型 --> 枚举(插入,更新)
  6. 状态-->(同步/未同步)

基于这个同步表,我从本地数据库中获取之前未同步的所有数据,并使用 curl 将这些数据提交到在线数据库以插入和更新在线数据库。如果此过程成功,则同步表状态列的行将被同步,否则将保持默认值不同步。

这个过程对同步过程是否足够好?如何确保所有数据都成功传输以及大数据的数据完整性?这个过程可能会出现什么问题?

最佳答案

为了与托管服务器交换信息,我更喜欢使用 TXT 或 XML 等中间文件。

我假设您的请求不需要实时解决(同步),它可以支持在几分钟内解决(异步)。

一个想法。

  1. 在在线数据库中查找新闻并将新内容“导出”到 TXT 文件。
  2. 将 TXT 移动到本地数据库
  3. 运行查询以将此内容与本地数据库同步
  4. 运行查询以从本地数据库获取新内容并导出到 TXT 文件。
  5. 将 TXT 移动到在线数据库
  6. 运行查询以将此内容与在线数据库同步

解释比做更难。

为了进行查询,您可以使用: http://www.phpclasses.org/package/1803-PHP-Synchronize-MySQL-database-copies.html

您必须创建一个 cron 以每 5 分钟或您想要的时间运行此查询。

关注新内容也非常重要:明确定义的触发器可以显示哪些内容是新的或不是新的,这是在此过程中取得成功的基线。

希望它适合你。

关于mysql - 将本地MySQL数据库同步到线上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33842370/

相关文章:

mysql - 我可以用 JOIN 做一些 DELETE 吗?

php - php/sql 登录脚本故障排除

java - 为什么此 mySQL 数据库无法连接到 Netbeans?

Mysql workbench同步不同数据库

java - 获取多个锁时发生死锁

android postDelayed 和 removeCallbacksAndMessages 同步

php - 如何将生成的 MySQL 行存储到数组中?

Python - 准确显示 MySQL 数据库中的数据

php - 动态计算php mysql结果总和

python - SQLAlchemy:唯一约束失败错误,但未设置唯一约束