假設現在有三臺主機,兩臺主庫分別爲master1,master2,一臺從庫slave
1,在主庫上分別開啓二進制日誌,並且配置不同server-id;
[mysqld]
log-bin=mysql-bin
server-id=1
2,分別在兩臺主庫創建一個專用於複製的用戶,並且賦予複製權限;
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
3,分別在兩個主庫執行狀態查詢,並且記錄查詢狀態;
SHOW MASTER STATUS;
分別記錄file,position,假設master1查詢結果爲file1,pos1,master2查存結果爲file2,pos2
4,配置從庫
1),設置如下兩個變量值爲table;
set global master_info_repository='TABLE';
set global relay_log_info_repository='TABLE';
2),分別執行如下設置語句:
CHANGE MASTER TO
MASTER_HOST='master1,
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='file1',
MASTER_LOG_POS=rpos1 for channel 'master1';
CHANGE MASTER TO
MASTER_HOST='master2,
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='file2',
MASTER_LOG_POS=rpos2 for channel 'master2';
3),啓動從庫複製
同時啓動:
start slave;
也可以分別啓動:
start slave for channel 'master1';
start slave for channel 'master2';
同時停止:
stop slave;
也可以分別停止:
stop slave for channel 'master1';
stop slave for channel 'master2';
注意:如果通過虛擬機來操作的過程中,有拷貝虛擬機的情況,比如通過拷貝master1來創建虛slave,
那麼很可能會出現從庫不能啓動問題,此時需要在從庫執行以下操作:
1,清空從庫以下表格:
slave_master_info
slave_relay_log_info
slave_worker_info
innodb_index_stats
innodb_table_stats
2,停止mysqld服務,刪除數據目錄下的auto.cnf文件,重新啓動mysqld服務;
3,繼續配置從庫。