接上节,本节需要做的是配置M-M的replication,主主同步其实可以简单的看成两台实例间同时互相做主从,配置步骤如下:
1、两台Master都要进行账户授权,但由于上一节我们在两台主机上针对所有ip(‘%’)进行了授权,所以这一步我们可以省略,如果之前只针对单IP进行授权的同学,需要再进行一次Master间的互授权
mysql>> GRANT REPLICATION SLAVE ON *.* TO 'user'@'ip' IDENTIFIED BY 'password';
2、修改两个数据库的my.conf文件,加入以下配置:
因为两台均为master,所以为了避免自增主键冲突,需要设置自增开始值一个为1,一个为2,同时每次递增2,保证自增主键不冲突。
Master A:
log-slave-updates
sync_binlog=1
auto_increment_offset=1
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误
Master B:
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误
3、分别重启Master A 和 Master B的mysql服务
4、分别查看两个实例的master状态
Master A:
mysql> flush tables with read lock;#防止进入新的数据
Query OK, 0 rows affected (0.00 sec)
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000007
Position: 438
Binlog_Do_DB: db_rocky
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
Master B:
mysql> flush tables with read lock;#防止进入新的数据
Query OK, 0 rows affected (0.00 sec)
mysql> show master status\G;
*************************** 1. row
***************************
File: mysql-bin.000008
Position: 107
Binlog_Do_DB: db_rocky
Binlog_Ignore_DB: mysql
1 row in set (0.01 sec)
5、分别在两个实例上执行change master指令,指定同步位置:
Master A:
mysql> change master to master_host='192.168.4.87',master_user='water',master_password='cdio2010',
-> master_log_file='mysql-bin.000008',master_log_pos=107;
Query OK, 0 rows affected (0.05 sec)
Master B:
mysql> change master to master_host='192.168.4.85',master_user='water',master_password='cdio2010',
-> master_log_file='mysql-bin.000007',master_log_pos=438;
Query OK, 0 rows affected (0.05 sec)
注:master_log_file,master_log_pos由上面主服务器查出的状态值中确定
6、解锁两个数据库实例的表和启动从服务器线程:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
7、分别查看从服务器状态
Master A上
mysql> show slave status\G;
*************************** 1. row ***************************
主要关注以下 2 个参数:
...
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
...
Master B上:
mysql> show slave status\G;
*************************** 1. row ***************************
主要关注以下 2 个参数:
...
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
...
接下去,分别在两台实例的test1库中进行操作,发现能同步到另外一台Master上,至此,双主从复制方案部署成功!