Home >Database >Mysql Tutorial >MySQL 数据库双向镜像、循环镜像(复制)_MySQL

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

WBOY
WBOYOriginal
2016-06-01 13:21:021002browse

bitsCN.com 对于双向数据库镜像,就是数据库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 这三个数据库。bitsCN.com

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn