MySQL傳統主從複製(第一彈)

0、引言html

MySQL主從複製的原理及搭建,故障分析mysql

 

1、MySQL主從同步的架構及原理sql

原理:安全

1)Slave鏈接到master,主從數據一致,開啓同步,開始同步數據微信

2) 用戶在主上寫入數據,日誌儲存到binlog,master上IO thread讀取主庫binlog,而後把信息傳遞給從庫上的IO thread網絡

3)從庫上的IO thread再把部分信息存儲在master.info(存儲鏈接位置信息)和relay log裏(存儲binlog信息)架構

4)從庫上的SQL thread監測到relay log有更新,把更新的信息恢復到從庫,而後把位置點信息記錄下來函數

 

 

2、MySQL實現主從同步的幾種方式及使用價值工具

 

一、MySQL主從複製的幾種實現方式性能

l  基於binlog+position的傳統複製

l  基於事務的GTID複製

l  多源複製

l  Group replication(5.7新特性)

l  半同步

 

二、MySQL主從複製的使用價值

l  利用從庫作高可用

l  利用從庫作讀寫分離

l  利用從庫作升級

 

 

3、MySQL基於binlog三種模式下的複製

 

一、基於statement格式的複製

優勢:binlog文件小,節省磁盤IO,只記錄執行的SQL,方便閱讀統計

缺點:對MySQL特殊函數不能複製,可能會致使主從不一致

 

二、基於row格式的複製

優勢:詳細記錄每一行的修改信息(上下文信息),不會出現某些特定狀況下函數、觸發器、存儲過程不執行的狀況,方便flashback

缺點:binlog文件會更大,不能直接看到用戶執行的SQL語句

 

三、基於mixed格式的複製

匯合使用row格式和statement格式,對於DDL記錄會statement格式,對於table裏的行操做記錄爲row格式。可是bug較多,不建議使用

 

 

4、MySQL的主從配置

 

一、創建用於同步的帳號(權限replication slave)

二、確保server-id全局惟一,並開啓log-bin

三、備份主庫,恢復到從庫,確保主從數據一致

四、查看主庫位置信息並配置鏈接,開啓主從

 

Tips:

一、若是庫表較多,可使用percona-tools工具集進行主從校驗

二、也能夠看slave status輸出,瞭解同步情況

>show slave status\G;關注下面幾個信息

Slave_IO_Running:從庫I/O線程是否工做

Slave_SQL_Running:從庫SQL線程是否工做

Seconds_Behind_Master:同步延遲時間,單位秒

Master_Log_File:主庫上的I/O線程目前讀到的binlog

Read_Master_Log_Pos:主庫上的I/O線程目前讀到的binlog的點

Relay_Master_Log_File:從庫SQL線程目前執行到的主庫binlog

Exec_Master_Log_Pos:從庫SQL線程目前執行到的主庫binlog的點

Relay_Log_File:從庫SQL線程目前執行的relay log

Relay_Log_Pos:從庫SQL線程目前執行的relay log的點

 

 

5、MySQL主從複製怎麼保證數據一致性

 

在MySQL中,一次事務提交後,須要寫undo、寫redo、寫binlog,寫數據文件等等。在這個過程當中,可能在某個步驟發生crash,就有可能致使主從數據的不一致。那麼如何保證複製數據一致性呢?

一、在master上修改配置,設置雙一,保證每次提交後,日誌落盤

innodb_flush_log_at_trx_commit = 1

sync_binlog = 1

 

二、在slave上修改配置,前兩個選項是確保slave上和複製相關的元數據表也採用innoDB引擎,受到innoDB事務安全的保護,後一個選項是開啓relay log自動修復機制,儘量避免數據丟失

master_info_repository = "TABLE"

relay_log_info_repository = "TABLE"

relay_log_recovery = 1

 

經過以上兩個方式基本能夠保證主從環境裏數據一致性,若是仍是出現主從數據不一致,可經過pt-table-checksum 和 pt-table-sync 工具來進行數據的校驗和修復。

 

 

6、MySQL主從複製常見問題及處理

MySQL同步中斷常見是由兩個方面引發:

I/O中斷 :網絡問題、主機宕機、受權改變

SQL中斷:執行的SQL出錯

 

一、主從複製過程當中,修改用於複製帳號的密碼,致使主從不一樣步

原來主從正常運行,後來修改用於複製帳號的密碼,修改完後從新執行

change master to master_host='xxx.xxx.xxx.xxx', master_user='replication user', master_password='passwd', master_port=xxxx, master_log_file='mysql-binlog.000xxx', master_log_pos=xxx;

悲劇了,若是指定MASTER_HOST與MASTER_PORT參數,slave會認爲master與以前的不是同一個(即使MASTER_HOST 與 MASTER_PORT所帶的參數與以前相同),以前指定的master的binlog文件名及位置將再也不適用。

所以,更新密碼後,只須要

change master to master_user='replication user', master_password='new passwd';

 

二、同步延時

seconds_behind_master>0

可能的緣由:

l  主庫在大量導入數據

l  從庫硬件跟不上,致使性能降低

l  從庫讀負載較大

l  RAID卡充放電

 

三、常見的error code及意義

1062錯誤:

主鍵衝突,通常能夠跳過此類錯誤或者在配置文件中設置slave-skip-errors=1062

 

1032錯誤:

找不到這條記錄,能夠在從庫手動插入數據。或者跳過這個錯誤,要視狀況而定。

 

1050錯誤:

從庫上表存在了,直接刪除這個表便可

 

 

參考文檔:

FAQ系列 | 如何保證主從複製數據一致性

http://imysql.com/2015/11/20/mysql-faq-how-make-sure-replicate-data-consistant.shtml

 

爲了方便你們交流,本人開通了微信公衆號,和QQ羣291519319。喜歡技術的一塊兒來交流吧

相關文章
相關標籤/搜索