
在MySQL复制架构中,主主复制与主从复制有所不同。主主复制允许两台服务器中的任意一台的数据库发生变更时,都能将变更同步到另一台服务器。这样两台服务器互为主从,均可对外提供读写服务,从而在响应性能上通常优于主从复制结构。
以下为MySQL主主复制的配置步骤,假设两台服务器分别为:
server1: 192.168.1.108
server2: 192.168.1.110
创建复制账号
在server1上执行:
GRANT REPLICATION SLAVE ON *.* TO 'server2'@'192.168.1.110' IDENTIFIED BY 'server2';
在server2上执行:
GRANT REPLICATION SLAVE ON *.* TO 'server1'@'192.168.1.108' IDENTIFIED BY 'server1';
修改MySQL配置文件
在server1的my.cnf中添加以下配置:
[mysqld] server-id = 10 log-bin = mysql-bin replicate-do-db = mydb auto-increment-increment = 2 auto-increment-offset = 1
其中,auto-increment-increment应设为服务器总数,本例为2;auto-increment-offset用于设置自增字段的起始偏移量,server1设为1。
在server2的my.cnf中配置:
[mysqld] server-id = 20 log-bin = mysql-bin replicate-do-db = mydb auto-increment-increment = 2 auto-increment-offset = 2
server2的auto-increment-offset设为2,以避免两台服务器自增ID冲突。修改后重启两边的MySQL服务。
初始化数据同步
为保证两边的初始数据一致,可先在server1上备份指定数据库:
mysqldump --databases mydb > /tmp/mydb.sql
在server2上创建同名数据库后导入数据:
CREATE DATABASE mydb;
将备份文件复制到server2并导入:
mysql -uroot -p mydb < /tmp/mydb.sql
配置复制链路
在server1上设定同步源为server2:
CHANGE MASTER TO MASTER_HOST='192.168.1.110', MASTER_USER='server2', MASTER_PASSWORD='server2'; START SLAVE;
在server2上设定同步源为server1:
CHANGE MASTER TO MASTER_HOST='192.168.1.108', MASTER_USER='server1', MASTER_PASSWORD='server1'; START SLAVE;
验证同步状态
分别在两台服务器上执行SHOW SLAVE STATUSG,查看Slave_IO_Running与Slave_SQL_Running是否为Yes,并检查两边数据是否一致。若一切正常,主主复制架构即配置完成。