3

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

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

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

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

4

1 回答 1

3

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

祝你好运!

于 2013-02-17T13:08:01.897 回答