linux中mysql主從複製原理及配置
原理:
1、master伺服器上的資料發生改變時,會將改變的資料記錄到二進位制binlog日誌中。
2、當slave伺服器發現master的binlog發生改變時,會開啟一個I/O執行緒去請求連線master伺服器,並請求從指定binlog日誌檔案的指定位置之後傳送binlog日誌內容。
3、當master伺服器收到來自slave伺服器的I/O執行緒請求後,master回開啟一個dump執行緒,用來將指定binlog日誌檔案指定位置之後的內容返回給slave伺服器。
4、當slave伺服器的I/O執行緒獲取到master的binlog日誌內容後,會儲存到slave本地的relay log(中繼日誌)
5、salve伺服器的SQL執行緒會從relay log檔案中讀取日誌資訊,並解析成sql語句逐一執行,使其資料和master保持一致。應用完畢後的relaylog會被清理掉。
注意事項:
1、master一定要開啟binlog日誌功能(預設是關閉的),然後授予slave遠端連線的許可權。
2、mysql主從複製,至少需要兩個mysql服務。並且master和slave伺服器上的mysql版本最好相同(如果不一致,那麼要保證slave版本不低於master版本)。
3、master和slave兩節點間時間需同步。
主從複製安裝配置
1、基礎環境準備
#作業系統 centos 6.5 #mysql版本 5.7 #兩臺虛擬機器: node1:192.168.20.12 (主) node2:192.168.20.14 (從)
2、安裝mysql資料庫,可參考linux環境安裝mysql5.7
3、在兩臺資料庫中分別建立資料庫
create database mydb;
mysql預設情況下binlog是關閉的,如下:
4、在主(node1)伺服器上,進行如下配置:
# 修改配置檔案,執行以下命令開啟mysql配置檔案 vi /etc/my.cnf # 在檔案的最下面增加如下配置資訊 log-bin=master-bin #binlog二進位制檔名稱 binlog-format=ROW #binlog二進位制格式。有row、statement、mixed三種格式 server-id=1 #唯一標識,主從不一樣就行 binlog-do-db=mydb #同步的資料庫名稱
5、在主(node1)伺服器上,登入mysql服務,配置從庫登入主庫的賬號並授權:
set global validate_password_policy=0; set global validate_password_length=4; grant replication slave on *.* to 'root'@'%' identified by '123456'; flush privileges;
6、檢視master狀態(之前配置過,所有下面的file是從000003開始,否則應該是000001)
現有的master log資訊(日誌檔案是在儲存在/var/lib/mysql下)
7、重啟mysql服務,然後在從(node2)伺服器上配置:
change master to
master_host='192.168.20.12', #主庫地址 master_user='root', #授權賬戶 master_password='123456', #授權賬戶密碼 master_port=3306, #主庫埠 master_log_file='master-bin.000003', #下次同步的主庫起始binlog檔案 master_log_pos=154; #下次同步的主庫起始位置
這裡的配置,必須跟第6步中主伺服器狀態的值一一對應(特別是master_log_file和master_log_pos)
8、啟動slave主從複製
start slave;
9、檢查slave狀態
show slave status\G
從上面可以看到主從複製的相關配置資訊。如果Slave_IO_Running=Yes,Slave_SQL_Running=yes,則表示配置成功
在從伺服器/var/lib/mysql目錄下,可以看到多了幾個relay-bin中繼日誌檔案:
10、此時可以在主伺服器上進行相關的增刪改操作,在從伺服器上檢視結果是否同步