天天看點

Mysql主從複制原理以及實作

主從複制介紹:

      由于資料存儲是軟體和系統最重要的一部分,是以說如何做到資料安全、性能良好,就需要考慮很多的業務和技術,而主從複制在Mysql資料庫使用方面,是不可缺少的一個重要方案,我們用主從複制方案主要實作,讀寫分離實作負載均衡、實作實時資料備份,甚至還可以将不同的業務分到不同的備份庫。

實作的原理:

Replication原理 

Mysql 的 Replication 是一個異步的複制過程,從一個MySQL節點(稱之為Master)複制到另一個MySQL節點(稱之Slave)。在 Master 與 Slave 之間的實作整個複制過程主要由三個線程來完成,其中兩個線程(SQL 線程和 I/O 線程)在 Slave 端,另外一個線程(I/O 線程)在 Master 端。 要實作 MySQL 的 Replication ,首先必須打開 Master 端的 Binary Log,因為整個複制過程實際上就是 Slave 從 Master 端擷取該日志然後再在自己身上完全順序的執行日志中所記錄的各種操作。 

看上去MySQL的Replication原理非常簡單,總結一下: 

* 每個從僅可以設定一個主。 

  * 主在執行sql之後,記錄二進制log檔案(bin-log)。 

  * 從連接配接主,并從主擷取binlog,存于本地relay-log,并從上次記住的位置起執行sql,一旦遇到錯誤則停止同步。 

主要的架構與方案:

Master-Slave 主從同步

Master-Slave-Slave  一主多從(A->B->C)級聯方式

Master-Master   互為主備

<a href="http://s3.51cto.com/wyfs02/M01/85/7F/wKiom1elkX7h4X_XAAARU04fZng643.png-wh_500x0-wm_3-wmp_4-s_1278904964.png" target="_blank"></a>

Master-slave主從實作方案:

基本需求:

(1)    兩台虛拟機

192.168.121.105  mysql5.6.30 RPM包   資料庫主  master

192.168.121.146  mysql5.6.30 二進制包   資料庫從   slave

(2)主要的配置

Master 的my.cnf 開啟bin-log日志将server-id設定為一個随機數字,最好設定為IP之類的,從機可以不開啟二進制日志,因為從機不再做同步,如果還需要做同步時,需要開啟此功能,同時需要注意的是需要将server-id也設定為一個數字不能和主機相同。

<a href="http://s3.51cto.com/wyfs02/M00/85/7F/wKiom1elkX6xeut_AAA4pFzdQaw073.png-wh_500x0-wm_3-wmp_4-s_3309705519.png" target="_blank"></a>

主庫的配置

<a href="http://s3.51cto.com/wyfs02/M01/85/7E/wKioL1elkX7S1Ci-AABQMVzm76o917.png-wh_500x0-wm_3-wmp_4-s_2476825246.png" target="_blank"></a>

從庫的配置

(3)在主庫中建立具有replication slave權限的賬戶,從庫用來資料同步。

連接配接主庫,并用授權語句授權;

<a href="http://s3.51cto.com/wyfs02/M02/85/7E/wKioL1elkX2xHLHKAAAeyl-_tdg614.png-wh_500x0-wm_3-wmp_4-s_824799856.png" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/85/7F/wKiom1elkX6C3utzAAA7T6M5qsw054.png-wh_500x0-wm_3-wmp_4-s_1862941312.png" target="_blank"></a>

(4)還需要注意的是,當主庫有大量資料時,我們要将資料備份,手動恢複到從庫,然後在做主從,而資料備份的時候還要對主庫鎖表,隻讀,以防資料發生改變。

鎖表指令:

<code>Flush  </code><code>table</code> <code>with</code> <code>read</code> <code>lock;</code>

(5)鎖表後檢視主庫的二進制日志檔案名以及binlog日志偏移量,我們的資料将從這一點開始同步。

<a href="http://s2.51cto.com/wyfs02/M00/85/7E/wKioL1elkhLgAVGfAAAg0FS-UH8158.png-wh_500x0-wm_3-wmp_4-s_2972850831.png" target="_blank"></a>

<a href="http://s2.51cto.com/wyfs02/M00/85/7F/wKiom1elkhLBmJk9AABF_hN9miM873.png-wh_500x0-wm_3-wmp_4-s_465090855.png" target="_blank"></a>

(6)登入從庫配置從庫資料同步,以下的指令主要是将密碼端口等資訊寫入到master.info檔案。

<code>CHANGE  MASTER TO MASTER_HOST='192.168.121.105', MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='123123',</code>

<code>MASTER_LOG_FILE="mysql-bin.000002",MASTER_LOG_POS=318;</code>

執行完如果如果不報錯時,就可以開始資料同步。

在從庫上面執行

<code>start  slave;</code>

(7)執行完畢後就需要檢視是否同步成功,第一個yes 表示主機與從機間的同步,這兩個參數比較重要,隻有這兩個參數都是正确的,我們才能資料同步。

(8)資料同步驗證

在主庫建一個stu庫,再觀察從庫

<a href="http://s2.51cto.com/wyfs02/M00/85/7F/wKiom1elkhLyLJ9NAAArVb7aiZQ118.png-wh_500x0-wm_3-wmp_4-s_952510985.png" target="_blank"></a>

<a href="http://s2.51cto.com/wyfs02/M02/85/7E/wKioL1elkhKRwLaoAAAWB3Hbp4U258.png-wh_500x0-wm_3-wmp_4-s_1124460299.png" target="_blank"></a>

本文轉自 tianya1993 51CTO部落格,原文連結:http://blog.51cto.com/dreamlinux/1835040,如需轉載請自行聯系原作者