前提
服务器A的IP:1.1.1.1
服务器B的IP:2.2.2.2
数据库操作,务必提前备份好原始数据。
两台服务器的MySQL数据,先同步一次。保证数据完全一致。
停止mysql服务,防止有数据生成。
互相授权
1、进入服务器A的shell,给服务器B授权,授权账号为tongbu,密码为123456
Mysql>GRANT all privileges ON *.* TO tongbu@'2.2.2.2' IDENTIFIED BY '123456';
2、进入服务器B的shell,给服务器A授权,授权账号为tongbu,密码为123456
Mysql>GRANT all privileges ON *.* TO tongbu@'1.1.1.1' IDENTIFIED BY '123456';
数据库配置[my.cnf]
1、进入服务器A,编辑my.cnf文件:vi /etc/my.cnf
2、在[mysqld]的配置项中增加如下代码:
server-id=1 log-bin=mysql-bin binlog-do-db=xxx_data replicate-do-db=xxx_data auto_increment_increment = 2 auto_increment_offset = 1
3、进入服务器B,编辑my.cnf文件:vi /etc/my.cnf
4、在[mysqld]的配置项中增加如下代码:
server-id=2 log-bin=mysql-bin binlog-do-db=xxx_data replicate-do-db=xxx_data auto_increment_increment = 2 auto_increment_offset = 2
xxx_data即你要同步的库,若有多个,就多写几行。
auto_increment_offset设置自增起始值。
auto_increment_increment主键自增的步长,用于防止Master与Master之间出现主键冲突(重复),通常有多少台主服务器,设置为多少
MySQL二进制日志名和偏移量
服务器A、服务器B 分别执行mysql> show master status;得到File和Position。分别记录下来。
MySQL互相设置同步
假设:
服务器A:File是mysql-bin.000009,Position是153
服务器B:File是mysql-bin.000010,Position是154
那么
服务器A执行:
Mysql> stop slave; CHANGE MASTER TO MASTER_HOST='2.2.2.2', MASTER_USER='tongbu', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=154; Mysql> start slave;
服务器B执行:
Mysql> stop slave; CHANGE MASTER TO MASTER_HOST='1.1.1.1', MASTER_USER='tongbu', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=153; Mysql> start slave;
重启MySQL
重新启动MySQL:service mysqld restart
检查slave状态
执行:Mysql> show slave status\G,如果其中显示两个Yes,即同步成功。可以测试数据同步效果。
...... Slave_IO_Running: Yes Slave_SQL_Running: Yes ......
答疑:
我 :如果其中一个数据库的服务器无法访问了,我切换到另一个服务器,到时候那个服务器可以访问了,那时是哪边同步到哪边呢?会不会异常?
作者:他们可能就不会同步了;stop slave后,校准数据后,重新start
我 :哦,你的意思是需要手动同步,然后重新开始,对吧......
作者:恩。如果服务器异常,就停止同步,自己重新对齐 MASTER_LOG_FILE=和MASTER_LOG_POS,再次启动
原文来自:https://blog.chrison.cn/work/216.html
本文地址:MySQL数据库实现主主同步的方法(自动互相同步数据)
发表评论