这是场景.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 | |-----------|
Amadiere.. 11
在两个主服务器上复制数据库没有太多性能.但是,如果您正确编写应用程序代码,则会有一点点故障转移.
Master-Master设置与Slave-Master设置基本相同,但启动了两个Slave并对每个盒子上的配置文件进行了重要更改.
掌握MySQL 1:
auto_increment_increment = 2 auto_increment_offset = 1
掌握MySQL 2:
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在服务器2插入第4个时插入前3个记录(1 3和5),则将给出6的密钥(不是2,未使用).
一旦你设置了它,就把它们作为奴隶开始.
然后检查两个都OK的工作,同时连接到机器并执行命令SHOW SLAVE STATUS
,你应该注意,这两个Slave_IO_Running
和Slave_SQL_Running
都应该说"是",在每个箱子.
然后,当然,在表中创建一些记录,并确保一个框仅插入奇数编号的主键,另一个框仅增加偶数编号的主键.
然后执行所有测试以确保您可以在每个盒子上执行所有标准应用程序,并将其复制到另一个盒子上.
它一旦开始就相对简单.
但正如已经提到的,MySQL确实不鼓励它,并建议您在编写应用程序代码时确保注意到这一功能.
编辑:我认为如果确保偏移正确等理论上可以添加更多主设备.但是,你可能会更现实地添加一些额外的奴隶.
在两个主服务器上复制数据库没有太多性能.但是,如果您正确编写应用程序代码,则会有一点点故障转移.
Master-Master设置与Slave-Master设置基本相同,但启动了两个Slave并对每个盒子上的配置文件进行了重要更改.
掌握MySQL 1:
auto_increment_increment = 2 auto_increment_offset = 1
掌握MySQL 2:
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在服务器2插入第4个时插入前3个记录(1 3和5),则将给出6的密钥(不是2,未使用).
一旦你设置了它,就把它们作为奴隶开始.
然后检查两个都OK的工作,同时连接到机器并执行命令SHOW SLAVE STATUS
,你应该注意,这两个Slave_IO_Running
和Slave_SQL_Running
都应该说"是",在每个箱子.
然后,当然,在表中创建一些记录,并确保一个框仅插入奇数编号的主键,另一个框仅增加偶数编号的主键.
然后执行所有测试以确保您可以在每个盒子上执行所有标准应用程序,并将其复制到另一个盒子上.
它一旦开始就相对简单.
但正如已经提到的,MySQL确实不鼓励它,并建议您在编写应用程序代码时确保注意到这一功能.
编辑:我认为如果确保偏移正确等理论上可以添加更多主设备.但是,你可能会更现实地添加一些额外的奴隶.