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

本文介绍如何通过配置MySQL参数实现循环数据库镜像,确保多台服务器间数据同步,并避免自动递增字段冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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 这三个数据库。
mysql建立镜像数据库- - Tag: mysql建立镜像数据库 环境介绍:主库 192.168.0.205 从库 192.168.0.206 mysql版本:4.1.13a 1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加 server-id=1 log-bin=binlog_name 2、主库增加用户,用于从库读取主库日志。 grant replication slave,reload,super on *.* to 'slave'@'192.168.0.206' identified by '123456' 3、从库连接主库进行测试。 /opt/mysql/bin/mysql -u slave -p -h 192.168.0.205 4、停从库,修改从库/etc/my.cnf,增加选项: [mysqld] server-id=2 master-host=192.168.0.205 master-user=slave master-password=123456 5、启动从库,可以进行主从库数据同步 /opt/mysql/share/mysql/mysql start /opt/mysql/bin/mysql -u root -p mysql>load data from master; 说明:这一步不这么做也可以,用数据库倒入或者直接目录考过来也行。 6、进行测试: 主库创建表, mysql>create database sampdb; mysql>create table new (name char(20),phone char(20)); mysql>insert into new ('lhj','60549391'); 打开从库,察看: /opt/mysql/bin/mysql -u root -p mysql>show database; mysql sampdb test mysql>use sampdb; mysql>show tables; new 说明主从数据库创建成功。 7、主从数据库相关命令: slave stop; slave start ; 开始停止从数据库。 show slave status\G; 显示从库正读取哪一个主数据库二进制日志 purge master logs to 'binlog.000004';C此命令非常小心,删除主数据库没用的二进制日志文件。如果误删除,那么从库就没有办法自动更新了。 change master; 从服务器上修改参数使用。 如果数据库表是myisam类型,并且权限够 grant replication slave,reload,super on *.* to 'slave_user'@'host' identified by 'slave_pass' 也可以用load data from master命令,建立从数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值