MySQL數據庫自身提供的主從複製功能能夠方便的實現數據的多處自動備份,實現數據庫的拓展。多個數據備份不只能夠增強數據的安全性,經過實現讀寫分離還能進一步提高數據庫的負載性能。html
下圖就描述了一個多個數據庫間主從複製與讀寫分離的模型(來源網絡):java
在一主多從的數據庫體系中,多個從服務器採用異步的方式更新主數據庫的變化,業務服務器在執行寫或者相關修改數據庫的操做是在主服務器上進行的,讀操做則是在各從服務器上進行。若是配置了多個從服務器或者多個主服務器又涉及到相應的負載均衡問題,關於負載均衡具體的技術細節尚未研究過,今天就先簡單的實現一主一從的主從複製功能。python
Mysql主從複製的實現原理圖大體以下(來源網絡):mysql
MySQL之間數據複製的基礎是二進制日誌文件(binary log file)。一臺MySQL數據庫一旦啓用二進制日誌後,其做爲master,它的數據庫中全部操做都會以「事件」的方式記錄在二進制日誌中,其餘數據庫做爲slave經過一個I/O線程與主服務器保持通訊,並監控master的二進制日誌文件的變化,若是發現master二進制日誌文件發生變化,則會把變化複製到本身的中繼日誌中,而後slave的一個SQL線程會把相關的「事件」執行到本身的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從複製。linux
主服務器:sql
開啓二進制日誌
配置惟一的server-id
得到master二進制日誌文件名及位置
建立一個用於slave和master通訊的用戶帳號shell
從服務器:數據庫
配置惟一的server-id
使用master分配的用戶帳號讀取master二進制日誌
啓用slave服務
具體實現過程以下:安全
1.主從數據庫版本最好一致服務器
2.主從數據庫內數據保持一致
主數據庫:182.92.172.80 /linux
從數據庫:123.57.44.85 /linux
1.修改mysql配置
找到主數據庫的配置文件my.cnf(或者my.ini),個人在/etc/mysql/my.cnf,在[mysqld]部分插入以下兩行:
2.重啓mysql,建立用於同步的用戶帳號
打開mysql會話shell>
mysql -hlocalhost -uname -ppassword
建立用戶並受權:用戶:rel1密碼:slavepass
3.查看master狀態,記錄二進制文件名(mysql-bin.000003)和位置(73):
1.修改mysql配置
一樣找到my.cnf配置文件,添加server-id
2.重啓mysql,打開mysql會話,執行同步SQL語句(須要主服務器主機名,登錄憑據,二進制文件的名稱和位置):
3.啓動slave同步進程:
4.查看slave狀態:
當Slave_IO_Running和Slave_SQL_Running都爲YES的時候就表示主從同步設置成功了。接下來就能夠進行一些驗證了,好比在主master數據庫的test數據庫的一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據便可驗證主從複製功能是否有效,還能夠關閉slave(mysql>stop slave;),而後再修改master,看slave是否也相應修改(中止slave後,master的修改不會同步到slave),就能夠完成主從複製功能的驗證了。
還能夠用到的其餘相關參數:
master開啓二進制日誌後默認記錄全部庫全部表的操做,能夠經過配置來指定只記錄指定的數據庫甚至指定的表的操做,具體在mysql配置文件的[mysqld]可添加修改以下選項:
如以前查看master狀態時就能夠看到只記錄了test庫,忽略了manual和mysql庫。
原文連接:
https://www.cnblogs.com/gl-developer/p/6170423.html
識別圖中二維碼,領取python全套視頻資料