本文源出處:http://www.lustlost.com/?p=158mysql
在mysql的複製中,相對於主主複製,主從架構的穩定性更好,而主主老是會有些問題存在,故不推薦。在大型架構中建議使用基於讀寫分離的主從複製sql
本文不涉及讀寫分離的內容,只是簡單實現mysql的主從複製的實現。整個過程在理解複製的原理後就很是的簡單,因此先簡單介紹下原理。數據庫
mysql的主從複製的基本原理:安全
在主服務器上傳送二進制日誌到從服務器,在從服務器上讀取收到的中繼日誌,執行日誌中的sql語句,實現數據同步。服務器
整個實現過程以下圖所示,經過圖片能很容易的看出整個流程網絡
對於主從之間使用異步傳輸仍是同步傳輸,具體看網絡狀況和總體架構而定架構
要注意,爲了兼容性問題,主從服務器之間,master的mysql的版本要比slave版本低或者相同異步
若是在一個已存在數據的主服務器上部署備服務器,要先備份主服務器的數據,備份的時候作好二進制日誌位置記錄 ,而後恢復到從服務器上,並指定從服務器的從主服務器二進制日誌的複製位置,從時間點開始複製ide
實現過程命令行
首先在2臺服務器上安裝好mysql。安裝步驟再也不列出,我用的是綠色版安裝,雙方的mysql配置最好同樣
修改my.cnf,master上修改server-id爲1,slaver修改server-id爲大於1的數字
master:
slave:
在從服務器上關閉二進制日誌,避免從服務器上IO太高,並開啓relay-log
並且要在slave上限制寫入
在master上建立複製用的賬號,此賬號只授予複製相關的權限
在slave上進入mysql命令行,設定master相關參數
而後打開slave複製
查看slave狀態
發現鏈接到master時出現錯誤
清空master和slave的iptables規則後從新啓動slave,OK
試着在master上建立一個數據庫
在slave上查看,已經成功複製過來
若是在部署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