MySQL數(shù)據(jù)庫自身提供的主從復(fù)制功能可以方便的實現(xiàn)數(shù)據(jù)的多處自動備份,實現(xiàn)數(shù)據(jù)庫的拓展。多個數(shù)據(jù)備份不僅可以加強數(shù)據(jù)的安全性,通過實現(xiàn)讀寫分離還能進(jìn)一步提升數(shù)據(jù)庫的負(fù)載性能。
下圖就描述了一個多個數(shù)據(jù)庫間主從復(fù)制與讀寫分離的模型(來源網(wǎng)絡(luò)):
在一主多從的數(shù)據(jù)庫體系中,多個從服務(wù)器采用異步的方式更新主數(shù)據(jù)庫的變化,業(yè)務(wù)服務(wù)器在執(zhí)行寫或者相關(guān)修改數(shù)據(jù)庫的操作是在主服務(wù)器上進(jìn)行的,讀操作則是在各從服務(wù)器上進(jìn)行。如果配置了多個從服務(wù)器或者多個主服務(wù)器又涉及到相應(yīng)的負(fù)載均衡問題,關(guān)于負(fù)載均衡具體的技術(shù)細(xì)節(jié)還沒有研究過,今天就先簡單的實現(xiàn)一主一從的主從復(fù)制功能。
Mysql主從復(fù)制的實現(xiàn)原理圖大致如下(來源網(wǎng)絡(luò)):
MySQL之間數(shù)據(jù)復(fù)制的基礎(chǔ)是二進(jìn)制日志文件(binary log file)。一臺MySQL數(shù)據(jù)庫一旦啟用二進(jìn)制日志后,其作為master,它的數(shù)據(jù)庫中所有操作都會以“事件”的方式記錄在二進(jìn)制日志中,其他數(shù)據(jù)庫作為slave通過一個I/O線程與主服務(wù)器保持通信,并監(jiān)控master的二進(jìn)制日志文件的變化,如果發(fā)現(xiàn)master二進(jìn)制日志文件發(fā)生變化,則會把變化復(fù)制到自己的中繼日志中,然后slave的一個SQL線程會把相關(guān)的“事件”執(zhí)行到自己的數(shù)據(jù)庫中,以此實現(xiàn)從數(shù)據(jù)庫和主數(shù)據(jù)庫的一致性,也就實現(xiàn)了主從復(fù)制。
實現(xiàn)MySQL主從復(fù)制需要進(jìn)行的配置:
主服務(wù)器:
開啟二進(jìn)制日志
配置唯一的server-id
獲得master二進(jìn)制日志文件名及位置
創(chuàng)建一個用于slave和master通信的用戶賬號
從服務(wù)器:
配置唯一的server-id
使用master分配的用戶賬號讀取master二進(jìn)制日志
啟用slave服務(wù)
具體實現(xiàn)過程如下:
一、準(zhǔn)備工作:
1.主從數(shù)據(jù)庫版本最好一致
2.主從數(shù)據(jù)庫內(nèi)數(shù)據(jù)保持一致
主數(shù)據(jù)庫:182.92.172.80 /linux
從數(shù)據(jù)庫:123.57.44.85 /linux
二、主數(shù)據(jù)庫master修改:
1.修改mysql配置