【问题标题】:how to sync two mysql databases, when both of them have new entries如何同步两个mysql数据库,当它们都有新条目时
【发布时间】:2013-02-01 20:21:29
【问题描述】:

我在 localhost 上为我们的局域网(一个 php 应用程序)安装了 mysql 数据库,并且在我的在线服务器上安装了用于远程用户的相同应用程序和数据库的另一个副本。

有几个条目存在主键问题:场景如果用户在在线服务器上输入带有主键 #4 的新记录,而在本地服务器上已经存在带有主键 #4 的不同记录,所以应用程序会遇到问题。

注意:由于带宽有限,我无法将本地服务器联机。因此,我应该将在线服务器用于本地和远程,这是毫无疑问的

那么谁能告诉我如何同步我的两个数据库而不会遇到问题?

【问题讨论】:

  • 使用 guid 而不是递增整数。
  • @Matthew GUIDS 告诉我们有两种首先进行同步的方法,但它们有自己的问题,另一种是你必须制作一个表,因为首先进入的主人将被给予输入数据

标签: php mysql database localhost sync


【解决方案1】:

我推荐你使用的是 MySQL Master-Master 复制。我自己在笔记本电脑和主计算机上使用它来相互同步 MySQL 数据库(两个开发环境)。

假设在线服务器是服务器 1,局域网服务器是服务器 2。您应该将以下代码添加到服务器 1 上 MySQL 的 my.ini 文件中

#Config for server 1
server-id=1
log-bin=mysql-logbin
log-slave-updates
replicate-same-server-id=0
auto_increment_increment=2
auto_increment_offset=1
report-host=#IP ADDRESS of server 1#
binlog-ignore-db=MySQL

和服务器 2 上的 my.ini 文件

#Config for server 2
server-id=2
log-bin=mysql-logbin
log-slave-updates
replicate-same-server-id=0
auto_increment_increment=2
auto_increment_offset=2
report-host=#IP ADDRESS of server 2#
binlog-ignore-db=MySQL

比在 phpmyadmin 中,您可以创建“复制”用户。在服务器 1 上添加一个用户,并使用服务器 1 的用户数据从服务器 2 连接到服务器 1。现在服务器 2 是服务器 1 的从属服务器。相反,您也可以这样做:在服务器 2 上创建一个复制用户,然后将其添加到服务器 1。现在两台服务器都是彼此的主服务器,并且将始终保持同步!

需要考虑的重要一点是,在线服务器需要能够访问 LAN 服务器,因此您可能需要设置网络地址转换或一些端口转发。

如果您不希望两台服务器一直同步,但想解决主键问题,那么只需将其添加到两台服务器上的 my.ini 中即可。

#Config for server 1
auto_increment_increment=2
auto_increment_offset=1

#Config for server 2
auto_increment_increment=2
auto_increment_offset=2

现在服务器 1 将只使用 1, 3, 5, 7, 9, 11... 作为主键,服务器 2 将只使用 2, 4, 6, 8, 10, 12... 作为主键.这样你的问题就解决了。

注意:我发现使 Master-Master 复制工作的最佳方法是从两台服务器上的数据库中删除所有内容。比重置所有日志文件(这可以通过从“数据”目录中删除它们并在其他文件中编辑一些数字来手动完成),但也可以通过命令完成(非常节省)。然后,设置复制用户。由于两台服务器都是空的并且没有日志,因此没有任何反应。最后,将所有数据库添加到其中一台服务器,几秒钟内两个数据库应该会同步!

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2013-08-20
    • 1970-01-01
    • 2023-03-25
    • 2011-02-09
    • 2020-04-14
    • 2011-12-04
    相关资源
    最近更新 更多