首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mysql实时双向同步动态数据的最佳方式是什么

使用mysql实时双向同步动态数据的最佳方式是什么
EN

Stack Overflow用户
提问于 2008-11-28 13:37:41
回答 4查看 3.7K关注 0票数 11

这是一个场景。位于两个独立位置的两个web服务器,具有两个具有相同表的mysql数据库。表中的数据也应实时相同。

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

代码语言:javascript
复制
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  |
|-----------|
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-28 14:13:54

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

Master-Master设置本质上与Slave-Master设置相同,但两个Slave都已启动,并且每个机器上的配置文件都有一个重要的更改。

Master MySQL 1:

代码语言:javascript
复制
auto_increment_increment = 2
auto_increment_offset = 1 

Master MySQL 2:

代码语言:javascript
复制
auto_increment_increment = 2
auto_increment_offset = 2

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

例如,如果服务器1插入前3条记录(1、3和5),则当服务器2插入第4条记录时,它将被赋予键6(而不是未使用的2)。

设置完成后,将它们都设置为从属。

然后,要检查两台机器都正常工作,请连接到两台机器并执行命令SHOW SLAVE STATUS,您应该注意到,Slave_IO_RunningSlave_SQL_Running都应该在每个框上都说“是”。

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

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

一旦开始,它就会变得相对简单。

但正如前面提到的,MySQL确实不鼓励这样做,并建议您确保在编写应用程序代码时注意此功能。

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

票数 11
EN

Stack Overflow用户

发布于 2008-11-28 13:57:32

MySQL不支持同步复制,然而,即使它支持同步复制,您也可能不想使用它(不能承受等待其他服务器在每次事务提交时同步的性能影响)。

你将不得不考虑更合适的架构解决方案--有第三方产品会以预定的方式进行合并和解决冲突--这是真正的唯一方法。

期望你的体系结构以这种方式工作是天真的--任何数据库都没有“简单的修复”,不仅仅是MySQL。

票数 2
EN

Stack Overflow用户

发布于 2008-11-28 13:49:41

UID相同很重要吗?或者,您是否会考虑使用表或列将远程UID映射到本地UID,并为希望复制的对象编写自定义同步代码,以便为外键列执行任何必要的UID映射,等等?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/325791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档