主從複製(MySQL高階知識十五)
前言:本章主要講解MySQL主從複製的操作步驟。由於環境限制,主機使用Windows環境,從機使用用Linux環境。另外MySQL的版本最好一致,筆者採用的MySQL5.7.22版本,具體安裝過程請查詢相關資料。
1.主從複製的基本原理
slave會從master讀取binlog來進行資料同步。主要有以下三個步驟:
①master將改變記錄到二進位制日誌(binary log),這些記錄過程叫做二進位制日誌事件(binary log events)。
②slave將master的binary log events拷貝到中繼日誌(relay log)。
③slave重做中繼日誌中的事件,將改變應用到自己的資料庫中。MySQL的複製是非同步且序列化的。
2.主從複製的規則
①每個slave只能有一個master。(一對一)
②每個slave只能有一個唯一的伺服器ID。
③每個master可以有多個slave。(一對多)
在主從複製過程中,最大的問題就是延時。
3.一主一從的常見配置
#1.要求。
MySQL版本最好一致且後臺以服務執行。並且保證主機與從機互相ping通。主從配置都在[mysqld]結點下,都是小寫。
#2.主機修改my.ini配置檔案
①server-id=1,主機伺服器id。(必須)
②必須啟用二進位制檔案。
log-bin="E:\devSoft\mysql-5.7.22-winx64\data\mysql-bin"
配置該項後,重新啟動mysql服務,可看到如下內容。
③啟用錯誤日誌。(可選)
log_error ="E:\devSoft\mysql-5.7.22-winx64\data\log\errorlog\log_error.log"
④根目錄、資料目錄。(可選)
#mysql安裝根目錄 basedir ="E:\devSoft\mysql-5.7.22-winx64" #mysql資料檔案所在位置 datadir ="E:\devSoft\mysql-5.7.22-winx64\data"
⑤臨時目錄。(可選)
tmpdir ="E:\devSoft\mysql-5.7.22-winx64\"
⑥read-only=0,表示主機讀寫都可以。
⑦可設定不需要複製的資料庫。(可選)
binlog-ignore-db=mysql
⑧可設定需要複製的資料庫。(可選)
binlog-do-db=databasename
#3.從機修改my.cnf配置檔案
①從伺服器ID。(必須)
②啟用二進位制日誌。(可選)
#4.主機與從機都關閉防火牆,其實也可配置ip規則,但關閉防火牆更快速。
#5.在Windows主機上建立賬戶並授權給slave。
a.首先在主機上建立賬戶:
#%表示任何客戶端都可以連線 grant all privileges on *.* to slaveaccount(使用者名稱)@"%(或者指定ip)" identified by '你想設定的密碼' with grant option;
b.然後重新整理許可權表:
flush privileges;
c.然後授權給slave:
GRANT REPLICATION SLAVE ON *.* TO 'slaveaccount(上面建立的使用者名稱)'@'從機資料庫ip' IDENTIFIED BY '你想設定的密碼'
d.利用b步驟命令再次重新整理許可權表。
#6.查詢master的狀態。
File和Position這兩個欄位非常重要,File告訴從機需要從哪個檔案進行復制,Position告訴從機從檔案的哪個位置開始複製,在從機上配置時需用到。執行完此操作後,儘量不要在操作主伺服器MySQL,防止主伺服器狀態變化(File和Position狀態變化)。
#7.在Linux從機上配置需要的主機。
CHANGE MASTER TO MASTER_HOST='主機IP',MASTER_USER='salveaccount',MASTER_PASSWORD='主機授權的密碼',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position數字;
#8.啟動從伺服器複製功能。
start slave;
啟動複製功能後,需要檢視主從複製配置是否成功。
注:只有當Slave_IO_Running:Yes和Slave_SQL_Running:Yes,這兩個都為Yes的時候,主從複製配置才成功。
#9.進行測試。
①首先在主機上建立資料庫並插入資料。
②在從機中檢視是否有相應資料庫。
通過從機上檢視相應資料,可知主從複製配置成功。
#10.停止從服務複製功能。
stop slave;
4.總結
#1.主從複製的配置,大部分都在主機上,注意檢視相關步驟。
#2.這裡將主從機的防火牆都關閉是為了更好的演示,實際生產環境中一般不會出現windows主機和linux從機這種情況,因此不應該關閉防火牆,而是根據具體情況配