一、首先装好两台MySQL,然后在/etc/my.cnf中增加配置。
在MySQL服务器1中,添加如下配置:
server-id=1 #服务器的标识
log-bin=mysql-bin
binlog-ignore-db=mysql,information_schema
auto-increment-increment=2
auto-increment-offset=1 #奇数id
slave-skip-errors=all
log_bin_trust_function_creators=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在MySQL服务器2中,添加如下设置:
server-id=2 #服务器的标识
log-bin=mysql-bin
binlog-ignore-db=mysql,information_schema
auto-increment-increment=2
auto-increment-offset=2 #偶数id
slave-skip-errors=all
log_bin_trust_function_creators=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在这里两台MySQL的配置文件,需要对auto_increment_offset字段,设定不同值。因为如果mysql中有自增长字段,不设定这个参数会起冲突,会报duplicate....的报错。
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
做主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2,这样可以避免两台服务器同时做更新时,自增长字段的值之间发生冲突。
配置好两台mysql的my.cnf配置文件后,service mysqld restart 重启mysql服务。
二、最后我们在MySQL命令行中设定账号和同步的日志节点。
在Mysql服务器1中,
mysql -u root -p
#设置用于数据同步的账号,默认不适用root账号。
grant replication slave on *.* to '数据同步账号'@'%' identified by '密码';
#输入如下命令,记录下file和position的值
show master status
在MySQL服务器2中,做如上同样的操作,然后将服务器1的file和position值设定到服务器2中,服务器2的file和position值输入到服务器1中。
在MySQL服务器1中,输如下命令:
stop slave;
change master to master_host='服务器2的IP',master_port=服务器2的的端口号,master_user='服务器2的数据同步账号',master_password='服务器2的密码',master_log_file='服务器2的file值',master_log_pos=服务器2的position值 ;
start slave;
在MySQL服务器2中,输如下命令:
stop slave;
change master to master_host='服务器1的IP',master_port=服务器1的的端口号,master_user='服务器1的数据同步账号',master_password='服务器1的密码',master_log_file='服务器1的file值',master_log_pos=服务器1的position值 ;
start slave;
范例如下图:
配置完后,分别在两台服务器上输show slave status ;
如果出现如下两个字段都是on的状态,则主主备份搭建完成。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在实际测试配置中,由于MySQL服务器2是克隆的MySQL服务器1的,所以start slave 后,show slave status 出现了Slave_IO_Running: No ,然后有如下报错信息。告知是因为两个MySQL服务器的UUID相重复了。
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
只需要,将basedir,即/use/local/mysql/data中的auto.cnf文件删掉后,重启mysql,就会出现新的auto.cnf文件,里面有新的UUID