mysql主從複製(一):一主多從

御前兩把刀刀發表於2018-03-25

一  應用背景

      MySQL資料庫自身提供的主從複製功能可以方便的實現資料的多處自動備份,實現資料庫的擴充。多個資料備份不僅可以加強資料的安全性,通過實現讀寫分離還能進一步提升資料庫的負載效能。下圖就描述了一個多個資料庫間主從複製與讀寫分離的模型。web伺服器(tomcat,apache,iis,weblogic等)從多個slave資料庫進行讀操作,從master資料庫進行寫操作,如圖:


在一主多從的資料庫體系中,多個從伺服器採用非同步的方式更新主資料庫的變化,業務伺服器在執行寫或者相關修改資料庫的操作是在主伺服器上進行的,讀操作則是在各從伺服器上進行。

二   主從複製原理

     Mysql主從複製的實現原理如下圖所示:


        MySQL之間資料複製的基礎是二進位制日誌檔案(binary log file)。一臺MySQL資料庫一旦啟用二進位制日誌後,其作為master,它的資料庫中所有操作都會以“事件”的方式記錄在二進位制日誌中,其他資料庫作為slave通過一個I/O執行緒與主伺服器保持通訊,並監控master的二進位制日誌檔案的變化,如果發現master二進位制日誌檔案發生變化,則會把變化複製到自己的中繼日誌中,然後slave的一個SQL執行緒會把相關的“事件”執行到自己的資料庫中,以此實現從資料庫和主資料庫的一致性,也就實現了主從複製。

三   主從複製的實現

     實驗環境:centos6.5   32位,mysql5.6.16

     master節點設定:主機名->tai2     ip->169.254.130.11

     slave節點設定:主機名->tai1      ip->169.254.130.10

     slave節點設定:主機名->tai3      ip->169.254.130.12

1.  master節點上的操作

1.1 開啟二進位制日誌

修改/usr/my.cnf  檔案,加入如下配置

#  vi  /usr/my.cnf


引數解釋:log-bin=mysql-bin  //將mysql二進位制日誌取名為mysql-bin

                  binlog-ignore-db  //表示不同步什麼資料庫

                  binlog-do-db        //表示只同步什麼資料庫,除此之外,其它不同步(如果這個引數配置了,上面那個引數可以不配置)

1.2 配置唯一的server-id


重啟mysql

# service mysql restart

1.3 獲得master二進位制日誌檔名及位置(Position)


注意:

執行完之後記錄下這兩值(File,Position),然後在配置完從伺服器之前不要對主伺服器進行任何操作,因為每次運算元據庫時這兩值會發生改變

1.4 建立一個用於slave和master通訊的使用者賬號

GRANT replication slave ON *.* TO 'wx123'@'%' IDENTIFIED BY '1234'; 

引數解釋如下圖:


然後執行命令

mysql>  flush privileges

重新整理MySQL的系統許可權相關表,以避免出現拒絕訪問的情況

2.  slave節點上的配置

2.1 配置唯一的server-id

和master的配置類似,如下圖


重啟mysql服務

#service mysql restart

2.2 使用master分配的使用者賬號讀取master二進位制日誌
登入mysql,先關閉slave,

關閉slave(如果你以前配置過主從的話,一定要先關閉)

命令:stop slave;


再執行命令

change master to
master_host="169.254.130.11",
master_user="wx123",
master_password="123456",
master_log_file="mysql-bin.000028",
master_log_pos=455;

引數解釋:MASTER_HOST  :  設定要連線的主伺服器的ip地址
       MASTER_USER  :  設定要連線的主伺服器的使用者名稱
       MASTER_PASSWORD  :  設定要連線的主伺服器的密碼
       MASTER_LOG_FILE  :  設定要連線的主伺服器的bin日誌的日誌名稱,即第3步得到的資訊
       MASTER_LOG_POS  :  設定要連線的主伺服器的bin日誌的記錄位置,即第3步得到的資訊,(這裡注意,最後一項不需要加引號。否則配置失敗)


2.4 啟用slave服務

# start slave;

檢視是否配置成功:
命令: show slave status;
 (可以在sqlyog裡面執行,會看得很清楚)


另外一臺從庫的操作方式類似,好了,主從複製就此ok!

注意事項:如果主庫裡面有初始化資料,那麼在主從複製前需要把資料先匯入到從庫以保證初始一致性!


相關文章