MySQL Replication Report

來源:互聯網
上載者:User

標籤:

很多人都會MySQL主從架構的搭建,但很多人沒有真正理解同步基本用途、同步的基本原理,還有當Master和Slave同步斷開後的處理以及導致Master和slave不同步的原因等等,當你對這些都了如指掌的時候,對於MySQL主從出現的一些常見問題,也能很輕鬆的解決它,而且對資料庫結構描述的最佳化及改造都會有很大的協助。下面我們一起來學習下MySQL Replication吧,^0^

 

Replication的用途:

1、資料分發,scale out,sacle up,垂直劃分,水平劃分

2、負載平衡 load balance

3、備份,一般不會用作備份,一旦執行delete操作,replication也不會保留

4、實現資料的高可用

5、可以在不同的主從庫上使用不同的儲存引擎

6、測試MySQL的升級

 

常見的MySQL Replication的架構有:

 

 

MySQL一主多從,實現讀寫分離的架構圖:

 

常見的負載平衡架構:

當使用的slave過多,減輕Mater壓力的級聯架構,Master2開啟log-slave-updates配置

 

一台Master down時候的冗餘架構:

 

Replication不同的庫到不同的主機:

 

 

原理:

1、三個進程:

MySQL的複製(relication)是一個非同步複製,從一個Master複製到另一個Slave。實現整個複製操作主要由三個進程完成的,其中兩個進程在Slave上(Sql進程和IO進程),另外一個進程在Master上(IO進程),如果replication在進行的話,在Master上可以通過運行show processlist查看,在Slave上可以執行show slave status進行查看,裡面的Slave_IO_Running:No

Slave_SQL_Running:No

是兩個進程的狀態是否運行。

2、三個log檔案和兩個info檔案:

複製進行時,在Master上執行的語句會記錄到bin.log裡面,日誌的位置和數字,當有變化發生時,slave會通過現代戰爭io進程讀取master的二進位log,發現有變化時,會把新的變化複製到它的relay.log(中繼日誌),會記錄行的位置和資料到一個新的檔案叫master.info,繼續檢查master的二進位log,當slave的sql進程發現在relay.log裡有變化時候會執行,同時slave也會通過sql進程去對比Master和Slave的變化,如果對比發現不一致,複製進程會停止並把錯誤資訊計入slave的error.log,如果結果對得上,一個新的日誌的位置和數字會記錄到relay-log.info檔案,slave會等另一個變化到relay.log檔案。

 

 

3、複製的基本過程如下:

簡單的講就是Mster記錄其變化到binlog,Slave接收到的變化會記錄到他的Relay log,slave通過重放relay log,然後寫進自己的log

1)、Slave上面的IO進程串連上Master,並請求從指定記錄檔的指定位置(或者從最開始的日誌)之後的日誌內容;

2)、Master接收到來自Slave的IO進程的請求後,通過負責複製的IO進程根據請求資訊讀取指定日誌的指定位置之後的日誌資訊,返回給Slave的IO進程。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊已經到Master端的bin-log檔案的名稱以及bin-log的位置;

3)、Slave的IO進程接收到資訊後,將接收到的日誌內容依次添加到Slave端的relay-log檔案的最末端,並將讀取到的Master端的bin-log的檔案名稱和位置記錄到master-info檔案中,以便在下次讀取的時候能夠清楚的告訴Master"我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我";

4)、Slave的Sql進程檢測到relay-log中新增加了內容後,會馬上解析relay-log的內容成為在Master端真實執行時的那些可執行檔內容,並在自身執行;

 

4、Replication的兩種複製層級:

Statement level層級 MySQL 3.23後:

每一條修改資料的query都會記錄到master的binary log中,slave複製時候sql線程會解析成合原來的master端執行過的相同的query。

優點是:不需記錄每條變化,減少log,節省IO。

缺點是:必須每條語句相關資訊,即上下文資訊。

Row level層級5.1以後:

Binaty log會記錄成每一行資料被修改的形式,然後在slave連接埠對相同的資料進行修改,鎖表操作會大量減少。

優點:不需要記錄執行query語句的上下文資訊,只需要記錄那條被修改了,修改了什麼了。

缺點是:產生的log記錄比較大

還有一種不常用的mixed層級。

 

5、導致master和slave不同步的原因

1)、delete update 改變行的時候不使用limit語句,沒有order by

2)、一些函數在使用statements based replication 時候如下:

       Load_file,User,Found_rows,UUID,UUID_SHORT,SYSDATE()

3)、不用使用暫存資料表,當slave crash掉或者重啟後,後丟失資訊

4)、slave down掉

5)、使用replicate-ignore-db 和 binlog-ignore-db

6)、錯誤的binlog執行sql導致binlog堵上,具體詳細內容可以參考:http://dev.mysql.com/doc/refman/5.0/en/replication.html

 

6、MySQL replication的曆史

mysql版本的4.0-5.0:

 

MySQL 5.1

 

 

 

 

總結:

一、通過MySQL Replication原理的學習,可以清楚理解到資料是怎麼從Master庫同步到Slave庫的,什麼情況會導致同步斷開等。

二、通過MySQL Replication架構的學習,可以根據線上及業務需要選擇合適自己業務的架構,提高資料的安全性及訪問的效率。

 

詳細內容可以參考大牛的部落格: http://ourmysql.com/archives/876

MySQL Replication Report

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.