1. 程式人生 > >《深入淺出MySQL:資料庫開發、優化與管理維護(2nd)》第31章之MySQL非同步複製搭建學習筆記

《深入淺出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相關操作,看看從庫上是否有相關資料。