《深入淺出MySQL:資料庫開發、優化與管理維護(2nd)》第31章之MySQL非同步複製搭建學習筆記
MySQL的複製原理大致如下:
(1)首先,MySQL主庫在事務提交時會把資料變更作為事件Events記錄在二進位制日誌檔案Binlog中;MySQL主庫上的sync_binlog引數控制Binlog日誌重新整理到磁碟。
(2)主庫推送二進位制日誌檔案Binlog中的事件到從庫的中繼日誌Relay Log,之後從庫根據中繼日誌Relay Log重做資料變更操作,通過邏輯複製以此來達到主庫和從庫的資料一致。
MySQL通過3個執行緒來完成主從庫間的資料複製:其中Binlog Dump執行緒跑在主庫上,I/O執行緒和SQL執行緒跑在從庫上。當在從庫上啟動複製(start slave)時,首先建立I/O執行緒連線主庫,主庫隨後建立Binlog Dump執行緒讀取資料庫事件併發送給I/O執行緒,I/O執行緒獲取到事件資料後更新到從庫的中繼日誌Relay Log中去,之後從庫上的SQL執行緒讀取中繼日誌Relay Log中更新的資料庫事件並應用。如下圖所示。
以資料庫單主單從來說,目前我測試過的資料庫的版本是5.7.17,在資料庫binlog都已開啟且無錯誤的情況下,下面的SQL中的ip可以根據自己的情況來做相應的修改
主庫執行下面的SQL
grant replication slave on *.* to 'rep1'@'%' identified by 'rep1';
grant replication slave on *.* to 'rep1'@'192.168.1.6' identified by 'rep1';這條SQL我在執行後從庫頻繁報賬戶拒絕登入的問題。使用上面的SQL就不會出現問題。
flush privileges;
show grants for 'rep1'@'%';
檢視主庫上當前的二進位制日誌名和偏移量值
show master status;
從庫執行下面的語句
CHANGE MASTER TO
MASTER_HOST='192.168.1.6',
MASTER_PORT=3306,
MASTER_USER='rep1',
MASTER_PASSWORD='rep1',
MASTER_LOG_FILE='mysql-bin-log.000003',
MASTER_LOG_POS=154;
MASTER_LOG_FILE和MASTER_LOG_POS顯示show master status顯示的值。
啟動slave執行緒
start slave;
檢視從庫狀態
show slave status \G
Slave_IO_Running和Slave_SQL_Running如果都為Yes且Last_IO_Errno後無錯誤說明,說明主從非同步複製搭建成功。
接下來自己可以在主庫上執行幾條SQL建庫、建表、CRUD相關操作,看看從庫上是否有相關資料。