1. 程式人生 > 實用技巧 >linux中mysql主從複製原理及配置

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(中繼日誌)

檔案(msql-relay-bin.xxxxxx)中。

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、此時可以在主伺服器上進行相關的增刪改操作,在從伺服器上檢視結果是否同步