两个Mysql数据库之间的同步

82
我们在各个商店运行Java PoS(销售点)应用程序,并使用MySql后端。我想让商店的数据库与主机服务器上的数据库保持同步。
当商店发生更改时,它们应该在主机服务器上进行更新。我该如何实现这一点?

11
MySQL复制:http://dev.mysql.com/doc/refman/5.0/en/replication.htmlMySQL复制是一种可靠的方法,用于将一个MySQL数据库服务器上的更改复制到其他MySQL服务器上。这使得多个服务器可以使用同一数据,并且可以在其中一个服务器上进行更改,而这些更改将自动在其他服务器上生效。MySQL复制可用于提高系统性能、提高可用性、实现数据备份等目的。 - Book Of Zeus
2
@peedee MySQL 复制非常容易设置。只需几个命令和初始同步即可。我第一次大约花了30分钟。 - ceejayoz
2
非常好的问题,我也为了同样的目的而在想同样的事情。 - codefreaK
你可以使用MySQL的复制功能,也有一些可用的工具来进行数据库同步,它们在这里列出:https://dev59.com/NHVD5IYBdhLWcg3wNIzc - Peter Venderberghe
我投票关闭此问题,因为它属于dba.stackexchange.com。 - user207421
显示剩余2条评论
4个回答

61

创建复制是不太难的。

这里有一些好的教程:

http://www.ghacks.net/2009/04/09/set-up-mysql-database-replication/

http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html

http://www.lassosoft.com/Beginners-Guide-to-MySQL-Replication

以下是一些简单的规则,你需要记住(当然还有更多规则,但这是主要概念):

  1. 设置1个服务器(主服务器)用于写入数据。
  2. 设置1个或多个服务器(从服务器)用于读取数据。

这样,您将避免错误。

例如: 如果您的脚本在主服务器和从服务器上都插入相同的表,则会出现重复的主键冲突。

您可以将“从服务器”视为“备份”服务器,它保存与主服务器相同的信息,但不能直接添加数据,只能遵循主服务器的指令。

注意:当然您可以从主服务器读取并向从服务器写入数据,但一定要确保不要将数据写入到同一个表中(即主服务器和从服务器都有对同一表的写操作)。

我建议您监控服务器以确保一切正常。

如果您需要额外的帮助,请告知我。


是的,Shop = 主控端,Server = 从控端。 - Book Of Zeus
我已经配置好了主数据库,现在我要连接到一个从数据库。当我这样做时,主数据库的任何更改都会反映在从数据库中,而从数据库的更改也会反映在主数据库中吗? - peedee
如果设置好了,你可以在主服务器中插入一条记录并在从服务器中进行选择测试。如果测试通过,那么就准备好了! - Book Of Zeus
嘿,伙计...我的从服务器上出现了1045错误。这是什么原因呢?你有什么想法吗? - peedee
我的情况涉及到有几个主数据库(位于不同的位置)和一个从数据库(在线数据库)。这个解决方案可行吗?是否可能实现?提前感谢您的回复 - @BookOfZeus - Daydah
显示剩余6条评论

23

三种不同的方法:

  1. 传统的客户端/服务器方法:不要在商店中放置任何数据库;只需让应用程序访问您的服务器。当然,最好设置 VPN,但仅将连接包装在 SSL 或 ssh 中也是合理的。优点:这是最初设计数据库的方式。缺点:如果延迟很高,复杂操作可能会变慢,您可能需要使用存储过程来减少往返次数。

  2. 复制的主-主模式:如@Book Of Zeus所建议的。缺点:设置略微更加复杂(特别是如果您有多个商店),任何商店机器的损坏都可能危及整个系统。优点:读操作完全本地化,响应更快,写操作异步传播。

  3. 离线操作 + 同步步骤:在本地执行所有工作,并定期(可以是每小时、每天、每周等)编写摘要,其中包含自上次同步操作以来所有新的/修改的记录,并发送到服务器。优点:可以在没有网络的情况下工作,速度快,易于检查(如果摘要可读)。缺点:您没有实时信息。


10
我需要设置第三种数据库同步方式(离线操作+同步),希望能了解更多相关信息。但我在谷歌上搜索不到相关内容。请问是否有书籍或文章可以参考? - abhishek77in

11

SymmetricDS就是答案。它支持一个方向或双向异步数据复制的多个订阅者,并使用web和数据库技术在关系型数据库之间复制表,如果需要,可以实现几乎实时的复制。

全面而强大的Java API以满足您的需求。


如果我有一个内部服务器,其中包含一个单独的数据库,用于在某些没有互联网的地区进行操作,并且我的在线买家位于托管数据库上,我想将内部数据库购买迁移到线上,您能否建议一下,如果它们都正在保留相同的ID,则两者之间的自动增量会发生什么混乱吧!因此(我需要将对内部数据库进行的操作与线上同步,而不会影响ID自动增量和表之间的关系)。 - shareef

1
请查看dbForge Studio for MySQL中的模式和数据比较工具。这些工具将帮助您比较、查看差异、生成同步脚本并同步两个数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接