Replication是複製的意思,這個架構會將主庫(master)的binlog傳送到從庫(slave),從庫會對這些日誌重新執行,保持主從庫之間資料同步,運用replication可以將查詢的動作指定到從庫,甚至可以直接在從庫做備份,減少主庫的效能問題。
以下是MySQL Replication架構。
在主庫(master)提交事務後會記錄在binlog中,之後主庫(master)傳送binlog到從庫(slave)的relaylog,從庫(slave)會開始做資料的變更操作。
Relaylog與binlog檔案格式、內容都一樣,不同在於從庫在執行完relaylog的SQL之後,會自己刪除當前的relaylog,為了保證從庫crash重啟後I/O與SQL thread能知道從哪裡開始複製,MySQL會建立master.info和relay-log.info來記錄複製進度。
Master.info紀錄i/o thread讀取binlog的進度。
Relay-log.info紀錄sql thread讀取relay log的進度。
首先必須先建立兩台MySQL Server完成,完成後開始設定MySQL Replication。
在Master增添下列參數至my.cnf登入檔
vi /etc/my.cnf
[mysqld]
server-id=1
log-bin=/mysql/binlog/mybin
default-authentication-plugin=mysql_native_password
(我們會透過這個用戶來完成replication動作)
mysql> create user 'rep'@'%' identified by '密碼';
mysql> grant replication slave on *.* to 'rep'@'%';
必須先將主從庫資料同步
mysqldump -uroot -p --all-databases > /tmp/alldb.sql
配置slave參數
Vi /etc/my.cnf
[mysqld]
server-id=2 #注意:不可與Master重複
log-bin=/mysql/binlog/mybin
relay-log=/mysql/relaylog/relay.log
read-only=on
default-authentication-plugin=mysql_native_password
將主庫資料匯入
mysql -uroot -p < /tmp/alldb.sql
先到master查看當前binlog
mysql> show master status;
Slave開始設定並啟動
mysql> change master to master_host='Master IP', master_user='rep', master_password='1qaz@WSX',master_log_file=’master 當前binlog’,master_log_pos=’master binlog pos’;
mysql> start slave;
mysql> show slave status\G
若都紅框內都顯示YES代表正常。