1. 程式人生 > >mysql主主同步模式

mysql主主同步模式

restart 完成 .cn 二進制日誌 creat cati 偏移 ast 關閉

主192.168.56.20 和 從都新建數據庫db1 db2 db3(如果數據庫在用,需要上鎖後手動從主備份,然後在從恢復)
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‘;

flush privileges;
配置文件開啟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

server-id=109
重啟從節點服務
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主主同步模式