mysql主主同步模式
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> create database db2;
Query OK, 1 row affected (0.00 sec)
mysql> create database db3;
Query OK, 1 row affected (0.01 sec)
主授權從的賬號
grant replication slave on . to ‘repl‘@‘192.168.56.21‘ identified by ‘repl‘;
配置文件開啟bin-log
vim /etc/my.cnf
【mysql】
server-id=101 #每個節點必須不一樣
log-bin=/var/lib/mysql/mysql-bin
重啟主服務
service mysqld restart
查看日誌文件和偏移量
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
| mysql-bin.000001 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
從192.168.56.21
修改配置文件
vim /etc/my.cnf
重啟從節點服務
service mysqld restart
配置從庫
關閉復制功能
mysql> stop slave;
mysql>change master to master_host=‘192.168.56.20‘,master_user=‘repl‘,master_password=‘repl‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=120;
啟動復制
Mysql>start slave;
檢查復制功能
mysql>show slave status\G
兩個進程需要yes才正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在主庫新建數據庫,然後去從庫看是否同步,同步表示正常。
create database hi_db;
主從同步配置完畢,現在開始配置主主。
配置主配置文件192.168.56.20
vim /etc/my.cnf
【mysql】
server-id=101 #每個節點必須不一樣
log-bin=/var/lib/mysql/mysql-bin
auto_increment_increment=2 #步進值auto_imcrement。一般有n臺主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n臺主MySQL。此時為第一臺主MySQL
#binlog-ignore=mysql #忽略mysql庫【我一般都不寫】
#binlog-ignore=information_schema #忽略information_schema庫【我一般都不寫】
#replicate-do-db=aa #要同步的數據庫,默認所有庫
重啟主節點服務
service mysqld restart
配置從配置文件192.168.56.21
vim /etc/my.cnf
server-id=109
log-bin=/var/lib/mysql/mysql-bin
auto_increment_increment=2 #步進值auto_imcrement。一般有n臺主MySQL就填n
auto_increment_offset=2 #起始值。一般填第n臺主MySQL。此時為第2臺主MySQL
重啟從節點服務
service mysqld restart
在從節點創建主復制的賬號
grant replication slave on . to ‘repl1‘@‘192.168.56.20‘ identified by ‘repl1‘;
flush privileges;
查看二進制文件
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 420 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
在主執行
關閉復制功能
mysql> stop slave;
mysql>change master to master_host=‘192.168.56.21‘,master_user=‘repl1‘,master_password=‘repl1‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=420;
啟動復制
Mysql>start slave;
檢查復制功能
mysql>show slave status\G
兩個進程需要yes才正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
然後分別在雙方創建數據庫,看看是否都同步。
1、主主復制配置文件中auto_increment_increment和auto_increment_offset只能保證主鍵不重復,卻不能保證主鍵有序。
2、當配置完成Slave_IO_Running、Slave_SQL_Running不全為YES時,show slave status\G信息中有錯誤提示,可根據錯誤提示進行更正。
3、Slave_IO_Running、Slave_SQL_Running不全為YES時,大多數問題都是數據不統一導致。
常見出錯點:
1、兩臺數據庫都存在db數據庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那肯定不能成功。
2、已經獲取了數據的二進制日誌名和位置,又進行了數據操作,導致POS發生變更。在配置CHANGE MASTER時還是用到之前的POS。
3、stop slave後,數據變更,再start slave。出錯。
終極更正法:重新執行一遍CHANGE MASTER就好了。
mysql主主同步模式