使用場景
- 主數據庫服務器故障後,可切換到從數據庫繼續工作
- 不影響主數據庫的性能的工作,比如在從數據庫作備份、數據統計等工作
常見問題及解決方案
-
複製延遲
可以利用同步複製機制(Semi-sync)解決,但是影響性能,當主機寫入時,確認更新已經同步到備機之後,再返回寫操作成功。
主從架構是一種高可用的解決方案,並不是處理高併發的,處理高併發可利用redis緩存來解決。
運行原理
從一個mysql instance(master)複製到另一個mysql instance(slave)的過程我們稱之爲mysql主從複製。在mysql複製的過程中,主要由3個線程完成sql線程和IO線程在slave,另一個IO線程在matser。
mysql複製的基本過程如下:
- slave上的IO線程連接master,請求日誌文件指定位置或者最開始的位置之後的日誌內容
- master接收請求,並通過負責複製的IO線程根據請求的信息讀取日誌文件內容,將日誌信息和master端的Binary Log文件的名稱以及在Binary Log中的位置返回給slave的IO線程
- slaveIO線程接收到信息後,將日誌內容寫到Relay Log文件最末尾,並將master端的bin-log的文件名和位置記錄到master-info文件中。下次請求時可告知master需要請求的位置
- slave的sql線程檢測到Relay Log文件新增後,執行此日誌文件的sql語句
實施環境
系統環境:centos7
MySQL版本:5.7.17
主服務器(master)IP:192.168.20.101
從服務器(slave)IP:192.168.20.99
配置
-
配置master服務器
[root] # vim /etc/my.cnf
修改如下內容:
server-id=101 #設置服務器唯一的id,默認是1
log-bin=mysql-bin #啓用二進制日誌 -
配置slave服務器
[root] # vim /etc/my.cnf
修改如下內容:
server-id=99 #設置服務器唯一的id,默認是1
replicate-do-db=cto #只同步cto庫
slave-skip-errors=all #忽略因複製出現的所有錯誤 -
重啓主從mysql服務
[root] # service mysqld restart
-
在master上給slave授權
[root] # >grant replication slave on *.* to [email protected] identified by "123456789";
-
查看master上數據庫狀態
[root] # >show master status;
- 在slave執行sql語句的同步
[root] # >change master to master_host='192.168.20.101', master_user='slave', master_password=rd='123456789', master_log_file='mysql-bin.000001', master_log_pos=442;
- 開啓salve同步
[root] # >start slave;
- 查看slave同步狀態
[root] # >show slave status \G;
-
檢驗
主(master)從(slave)