gpt4 book ai didi

php - 使用mysql实时双向同步动态数据哪种方式最好

转载 作者:IT老高 更新时间:2023-10-29 00:21:33 24 4
gpt4 key购买 nike

这里是场景。两个不同位置的 2 个 Web 服务器,具有两个具有相同表的 mysql 数据库。表中的数据也应该是实时相同的。

这就是问题所在。如果任一位置的用户同时将新记录输入到相同的表中,如下面的前两个表所示,其中每个表中的第三个记录已由不同的人同时输入。表中的数据不再相同。如下表第三张所示,无论更新发生在何处,保持数据实时保持一致的最佳方法是什么?这样在下面的插图中,新记录不是在每个表中以 3 行结束,而是双向复制,并将它们插入到两个表中以再次创建 2 个相同的表,这次有 4 列?

Server A in Location A
==============

Table Names
| ID| NAME |
|-----------|
| 1 | Tom |
| 2 | Scott |
|-----------|
| 3 | John |
|-----------|

Server B in Location B
==============
Table Names
| ID| NAME |
|-----------|
| 1 | Tom |
| 2 | Scott |
|-----------|
| 3 | Peter |
|-----------|


Expected Scenario
===========
Table Names
| ID| NAME |
|-----------|
| 1 | Tom |
| 2 | Scott |
| 3 | Peter |
| 4 | John |
|-----------|

最佳答案

在两个主服务器上复制您的数据库不会获得太多性能。但是,如果您的应用程序编码正确,则会有相当多的故障转移。

Master-Master 设置本质上与 Slave-Master 设置相同,但都启动了 Slaves,并对每个盒子上的配置文件进行了重要更改。

掌握 MySQL 1:

auto_increment_increment = 2
auto_increment_offset = 1

掌握 MySQL 2:

auto_increment_increment = 2
auto_increment_offset = 2

这两个参数确保当两台服务器出于某种原因争夺主键时,它们不会复制并终止复制。默认情况下,任何自动增量字段都不会递增 1,而是默认递增 2。在一个盒子上,它将从 1 开始偏移并运行序列 1 3 5 7 9 11 13 等。在第二个盒子上,它将从 2 开始偏移并沿着 2 4 6 8 10 12 等运行。从当前测试来看,自动增量似乎采用下一个空闲数字,而不是之前留下的数字。
例如。如果服务器 2 插入第 4 条记录时,服务器 1 插入前 3 条记录(1 3 和 5),则将给它 6 的键(不是 2,未使用)。

设置完成后,将它们都作为奴隶启动。
然后检查两者是否正常工作,连接到两台机器并执行命令 SHOW SLAVE STATUS 你应该注意 Slave_IO_RunningSlave_SQL_Running 应该在每个盒子上都说"is"。

然后,当然,在表中创建几条记录,并确保一个框只插入奇数主键,另一个只增加偶数主键。

然后进行所有测试,以确保您可以在每个盒子上执行所有标准应用程序,并将其复制到另一个盒子。

一旦开始,就比较简单了。
但如前所述,MySQL 确实不鼓励这样做,并建议您确保在编写应用程序代码时注意此功能。

编辑:我想如果您确保偏移量正确等等,理论上可以添加更多母版。不过,您可能会更现实地添加一些额外的从属设备。

关于php - 使用mysql实时双向同步动态数据哪种方式最好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com