mysql主從複製

在mysql的複製中,相對於主主複製,主從架構的穩定性更好,而主主總是會有些問題存在,故不推薦。在大型架構中建議使用基於讀寫分離的主從複製

本文不涉及讀寫分離的內容,只是簡單實現mysql的主從複製的實現。整個過程在理解複製的原理後就非常的簡單,所以先簡單介紹下原理。

 

mysql的主從複製的基本原理:

在主服務器上傳送二進制日誌到從服務器,在從服務器上讀取收到的中繼日誌,執行日誌中的sql語句,實現數據同步。

 

整個實現過程如下圖所示,通過圖片能很容易的看出整個流程

wKioL1QerlagUTUZAAUcODF0-O4230.bmp

對於主從之間使用異步傳輸還是同步傳輸,具體看網絡情況和整體架構而定

要注意,爲了兼容性問題,主從服務器之間,master的mysql的版本要比slave版本低或者相同

如果在一個已存在數據的主服務器上部署備服務器,要先備份主服務器的數據,備份的時候做好二進制日誌位置記錄 ,然後恢復到從服務器上,並指定從服務器的從主服務器二進制日誌的複製位置,從時間點開始複製

 

實現過程

首先在2臺服務器上安裝好mysql。安裝步驟不再列出,我用的是綠色版安裝,雙方的mysql配置最好一樣

 

修改my.cnf,master上修改server-id爲1,slaver修改server-id爲大於1的數字

master:

wKiom1QerlSCPyWdAAAuWPnqxX4020.bmp

slave:

wKioL1QerofCxgCcAAAwBOVaDBI302.bmp

在從服務器上關閉二進制日誌,避免從服務器上IO過高,並開啓relay-log

wKiom1QernrBX0o9AACDCHJL0v8108.bmp

而且要在slave上限制寫入

wKioL1QerqujDA3wAAAVeFCd9ig534.bmp

在master上創建複製用的帳號,此帳號只授予複製相關的權限

wKiom1QerqKQbibQAAEgyF0Oi-k991.bmp

在slave上進入mysql命令行,設定master相關參數

wKioL1QertKw7JD3AAEP6G7cO3o479.bmp

然後打開slave複製

wKiom1QertbQgx3kAACZgMxtRJk420.bmp

查看slave狀態

wKioL1Qerw2BgiRtAAQoVM7HBdY127.bmp

發現連接到master時出現錯誤

清空master和slave的iptables規則後重新啓動slave,OK

wKiom1QerxaTP37qAA0xDO9d_BI866.bmp

試着在master上創建一個數據庫

wKioL1Qer0eQkQ3uAALY-Hxx9-M013.bmp

在slave上查看,已經成功複製過來

wKioL1Qer1yxcBYRAAG4qCOV2_4421.bmp

如果在部署slave時master已經存有數據了,需要在master上備份數據,然後在slave上導入數據

在用mysqldump備份數據的時候,加上--master-data=2參數記錄正在使用二進制日誌文件和的POS位置

然後在slave上指定master服務器時,加上master_logfile=’xxx’,master_log_pos=xxx 指定起始的二進制文件和文件的pos位置開始複製

 

要讓slave開啓時暫時停止從服務器線程,在my.cnf中的mysqld段中加入以下參數

skip-slave-start=1

 

爲了讓服務器更加安全,防止斷電產生事物已經提交,數據還未寫入磁盤的問題,在master的my.cnf中的mysql段加入

sync_binlog=1

innodb_flush_logs_at_trx_commit=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章