MySQL 数据库双向镜像、循环镜像(复制)?

用于收藏精华贴子、网友共享的资料等。可以回复,不能发新贴。

版主: daimadaquan

版面规则
本版面不能发新贴,可以回复

MySQL 数据库双向镜像、循环镜像(复制)?

帖子Jack » 2009-12-26 3:29

MySQL数据库镜像的贴子中,主数据库A 的数据镜像到从数据库B,是单向的,Zen Cart网店的数据读写都必须在数据库A进行,结果会自动镜像到数据库B中。但是对数据库B的直接操作,不会影响数据库A。

对于双向数据库镜像,就是数据库A的数据变化要镜像到数据库B中,同时数据库B里的修改也要同时复制到数据库A里。
对于循环数据库镜像,就是多个数据库A、B、C、D等,对其中任一个数据库的修改,都要同时镜像到其它的数据库里。

应用:同一个Zen Cart网店的数据库和程序,可以放置在不同的主机上,在任一台主机上新增的订单、客户资料,都会同时加入其它的主机数据库里。

要实现双向或循环数据库镜像,首先要解决的就是防止数据库中自动递增(AUTO_INCREMENT)字段的冲突,以免多数据库各自生成一样的增量值。

下面以三台主机循环镜像为例,A是B的主镜像,B是C的主镜像,C是A的主镜像。三台主机上MySQL设置文件 /etc /my.cnf 中分别加入下面的参数:

代码: 全选
# 主机一:美国主机 A, IP: 100.101.102.201
[mysqld]
server-id                       = 10
log-bin                         = mysql-bin
log-slave-updates
replicate-same-server-id        = 0
auto_increment_increment        = 10
auto_increment_offset           = 1
master-host                     = 100.101.102.203
master-user                     = repl_user
master-password                 = repl_password
report-host                     = 100.101.102.201

# 主机二:中国主机 B, IP: 100.101.102.202
[mysqld]
server-id                       = 20
log-bin                         = mysql-bin
log-slave-updates
replicate-same-server-id        = 0
auto_increment_increment        = 10
auto_increment_offset           = 2
master-host                     = 100.101.102.201
master-user                     = repl_user
master-password                 = repl_password
report-host                     = 100.101.102.202

# 主机三:本地主机 C, IP: 100.101.102.203
[mysqld]
server-id                       = 30
log-bin                         = mysql-bin
log-slave-updates
replicate-same-server-id        = 0
auto_increment_increment        = 10
auto_increment_offset           = 3
master-host                     = 100.101.102.202
master-user                     = repl_user
master-password                 = repl_password
report-host                     = 100.101.102.203


简单说明:
server-id:数据库标识,每个数据库标识必须唯一;
replicate-same-server-id:设置为0,防止数据循环更新;
auto_increment_increment:这是循环镜像里最重要的参数之一,表示自动增量为10,这将允许最多10台数据库加入这个循环镜像的阵列,而自动递增字段不会重复。
auto_increment_offset:这是循环镜像里最重要的参数之一,表示偏移值,每个数据库的偏移值必须唯一,且在1和auto_increment_increment之间。
master-host:主数据库服务器的IP;
master-user:用于连接主数据库的镜像用户名;
master-password:用于连接主数据库的镜像密码;
report-host:提供给主数据库用于反向连接的IP,因为主数据库有时无法正确判断从服务器的IP,所以这里最好填上从服务器自己的IP地址。


另外,有时只需要镜像某些数据库,可以在 my.cnf 中加入:
replicate-do-db = db_name1
replicate-do-db = db_name2
replicate-do-db = db_name3

这样就仅仅镜像db_name1/db_name2/db_name3


如果只是某些数据库不要镜像,可以在 my.cnf 中加入:
replicate-ignore-db=db_name1
replicate-ignore-db=db_name2
replicate-ignore-db=db_name3

这样镜像时就忽略 db_name1/db_name2/db_name3 这三个数据库。
头像
Jack
论坛版主
论坛版主
 
帖子: 11665
注册: 2004-12-16 10:04

Re: MySQL 数据库双向镜像、循环镜像(复制)?

帖子ufffqbetg » 2009-12-29 9:01

顶,太强了
头像
ufffqbetg
VIP会员
VIP会员
 
帖子: 543
注册: 2009-04-14 9:20
QQ 帐号: 327063133

Re: MySQL 数据库双向镜像、循环镜像(复制)?

帖子loye13 » 2010-02-04 3:17

有个问题
我有AB两个数据库,在同一台服务器上,现在想把AB两个数据库中的订单和用户名互相镜像,也就是这两个表互相更新,怎么做?
不懂,说的不专业,呵呵
loye13
新手上路
新手上路
 
帖子: 15
注册: 2009-07-09 19:08

Re: MySQL 数据库双向镜像、循环镜像(复制)?

帖子Jack » 2010-02-04 8:20

如果在同一台服务器上,直接使用同一个数据库中的内容就行了,就是两个独立的网店共享订单和用户数据。具体方法在论坛里搜索下。
头像
Jack
论坛版主
论坛版主
 
帖子: 11665
注册: 2004-12-16 10:04

Re: MySQL 数据库双向镜像、循环镜像(复制)?

帖子loye13 » 2010-02-04 21:03

我因为其中一个网店是作为样品单,让客户下样品单的,数量没有限制,另外个有起订量限制的,所以不能用同一个数据库吧?现在就是想把两个数据库之间的客户做到同步,这样客户去样品站下单的时候,就不用重复注册了
loye13
新手上路
新手上路
 
帖子: 15
注册: 2009-07-09 19:08


回到 精华共享

 


  • 相关话题
    回复总数
    阅读次数
    最新文章

在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客