小编And*_*les的帖子

如何在 3 个或更多地理上独立的服务器之间集中 MySQL 数据?

解释问题的背景:

我们有一个在 Linux 服务器上运行的本土 PHP 应用程序(用于运行在线语言学习课程),并在本地主机上使用 MySQL 来保存用户数据(例如,所采取的测试结果、提交的工作标记、在不同页面上花费的时间)课程等)。

由于我们有来自不同地理位置的学生,我们目前在这些位置(西班牙、英国和香港)附近托管了 3 个虚拟服务器,并且用户被添加到离他们最近的服务器(他们通过不同的 URL 访问,例如 europe.domain.com 、uk.domain.com 和 asia.domain.com)。这是有效的,但这是一个管理噩梦,因为我们必须记住特定用户在哪个服务器上,并且用户只能连接到一个服务器。我们希望以某种方式集中信息,以便所有用户在任何服务器上都可见,并且用户可以连接到 3 个服务器中的任何一个。

问题是,我们应该使用什么方法来实现这一点。这一定是很多人都遇到过的问题,但经过一番谷歌搜索后,我没有找到任何结论。我见过的最接近解决方案的是:

  • 类似于 master-master 复制,但我已经阅读了很多帖子,表明这不是一个好主意,因为 auto_increment 字段之类的东西可能会破坏。

  • 循环复制,这听起来很完美,但引用 O'Reilly 的高性能 MySQL,“一般来说,环是脆弱的,最好避免”

我们不反对在应用程序中重写代码以使其适用于所需的任何解决方案,但我不确定复制是否正确使用。

谢谢,

安迪

PS 我应该补充一点,我们尝试写入中央数据库,然后使用从本地数据库读取,但不同服务器之间的响应时间非常糟糕,而且写入的数据可以立即读取也很重要,因此如果复制是太慢这可能会导致返回过时的数据。

编辑:我一直在考虑编写我自己的基本复制脚本,其中包括让每个用户都有一个服务器 ID 来说明哪个是他的“家庭服务器”,例如亚洲的用户将被标记为将香港服务器作为他们自己的服务器. 然后复制脚本(这将是一个设置为合理频繁地作为 cron 作业运行的 PHP 脚本,例如每 15 分钟左右)将在系统中的每个服务器上独立运行。他们将遍历数据库并将有关用户的任何信息分发到系统中的所有其他数据库,并将“主服务器”设置为运行脚本的服务器。他们还需要吸收已添加到“家庭服务器”所在系统上的任何其他数据库中的新信息。flag 是运行脚本的服务器。我需要弄清楚细节并建立逻辑来处理冲突,但我认为这是可能的,但是我想确保没有正确的解决方案已经存在,因为它似乎必须是许多人已经遇到的问题。

mysql mysql-replication

6
推荐指数
1
解决办法
971
查看次数

标签 统计

mysql ×1

mysql-replication ×1