MySQL資料庫多源複製方案
概述
由於目前生產環境的mysql資料庫分布在兩台伺服器,若從單一主從來看,配置很簡單,但是需要將兩台伺服器的資料庫同步到一台從庫上面,需要進行更多配置和注意事項。多源複製有兩種方案,Binlog+Position和GTID,我們採用的是第一種方案Binlog+Position進行的多源複製。
安裝mysql
在從庫的伺服器上安裝mysql-5.7版本的,目前只有mysql5.7以上的版本才支援多源複製。
配置mysql
1、配置兩台master的mysql
在my.cnf設定檔中增加或修改以下參數:
server_id = 90
log_bin = master_1
log-bin-index = master_1.index
2、配置slave
在my.cnf設定檔中增加或修改以下參數
server_id = 92
relay_log = slave
relay_log_index = slave.index
master-info-repository = TABLE
relay-log-info-repository = TABLE
replicate_ignore_db = mysql
開始配置多源主從複製
1、設定master
在master建立slave複製使用者:
grant replication slave,replication client on *.* to repl@'192.168.2.92' identified by 'repl';
flush privileges;
分別進入兩台master的mysql終端執行以下命令將mysql進行鎖表操作
flush tables with read lock;
然後執行show master status; 擷取master的log_bin_file的檔案名稱和file_size。
分別匯出兩台master的mysql需要備份的資料庫的結構和資料。
2、設定slave
登入slave的mysql終端,建立需要備份的資料庫(例:CREATE DATABASE `order_00` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;)
進入各個資料庫匯入master備份的資料庫的結構和資料(所花時間長短取決於資料量的大小)。
在slave執行完以上步驟後開始配置從複製,先執行stop slave; 然後slave複製master配置如下:
change master to master_host='192.168.2.91',master_port=3507,master_user='repl',master_password='repl',master_log_file='master_91.000001',master_log_pos=376 FOR CHANNEL 'master_91';
注意:需要分別配置兩台master,然後分別執行。
以上配置命令執行完成後,啟動slave執行命令:start slave;
檢查slave有沒有啟動成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上兩項為yes代表配置多源主從複製成功。
最後分別在master庫執行命令unlock tables;解除鎖表。
測試
分別在兩台master中的資料庫中抽查幾個資料庫進行建立資料表和資料,對master的建立表資料進行手動增刪改查,然後查詢slave有沒有進行同步,若和master的資料一致,則表示多源主從複製成功,若沒有同步則不成功,不成功從第一步開始檢查。
注意事項
1、遇到Slave_IO_Running: connection的時候,檢查master和slave的防火牆,若防火牆沒有問題,檢查change master配置的時候IP,port,user,pwd等。
2、遇到Slave_IO_Running: Yes,Slave_SQL_Running: Yes都是yes卻資料不同步的時候檢查my.cnf設定檔中replicate-do-db參數。可以將其注釋或者分庫單獨寫。
3、一定要在master鎖表後才能進行資料的匯出,不然可能會導致主從資料不一致。
4、再所有步驟完成後一定要解除master的鎖表,不然master插入資料會報錯。