數據庫架構學習之MySQL資料庫復制功能提供分擔讀負載功能介紹

MySQL復制功能提供分擔讀負載功能

為高可用,災難恢復,備份提供更多的選擇

通過二進制日志,將資料庫復制到備庫中(異步)

可以實現不同伺服器上的數據分佈

利用二進制日志增量進行

不需要太多的帶寬

但是使用基於行的復制再進行大批量的更改時,會給帶寬帶來一定的壓力

特別是跨IDC環境下進行復制

應該分批進行

實現數據讀取的負載均衡

需要其它組件配合完成

利用DNS輪詢的方式把程式的讀連接到不同的備份資料庫

使用LVS,haproxy這樣的代理方式

非共享架構,同樣的數據分佈在多臺伺服器上

增強瞭數據安全性

利用備庫的備份來減少主庫負載

復制並不能替代備份

方便進行資料庫高可用架構的部署

避免MySQL單點失敗

實現資料庫高可用和故障切換

實現資料庫在線升級

MySQL日志:

1、服務層日志:二進制日志,慢查日志,通用日志

2、存儲引擎層日志

2.1、innodb:重做日志,回滾日志

二進制日志

記錄瞭所有對MySQL資料庫的修改事件

包括增刪改查事件和對表結構的修改事件

隻記錄成功的事件

一、基於段的格式:binlog_format=STATEMENT

記錄的是sql語句

優點:

1、日志記錄量相對比較小,節約磁盤及網絡IO

1.1、隻對一條記錄修改或者插入

1.2row格式所產生的日志量小於段產生的日志量

2、並不強制要求主從資料庫的表設定完全相同

3、相比於基於行的復制方式更為靈活

缺點:

1、必須記錄上下文信息

2、保證語句在從伺服器上執行結果和在主伺服器上相同

2.1、在特定函數如UUID(),user()

2.2、這樣非確定性還是無法復制的

2.3、可能導致MySQL復制的主備伺服器數據不一致

查看格式:show variables like ‘binlog_format’

設置格式:set session binlog_format=statemnet

刷新log:show binary logs(先查看),flush logs

查看mysqlbinlog :mysqlbinlog 日志名

二、基於行的日志格式:binlog_format=ROW

row格式可以避免MySQL復制中出現的主從不一致問題

優點:

1、使MySQL主從復制更加安全

2、對每一行數據的修改比基於段的復制高效

誤操作而修改瞭資料庫中的數據,同時又沒有備份可以恢復時,我們就可以通過分析二進制日志,對日志中記錄的數據修改操作做反向處理的方式來達到恢復數據的目的

缺點:

1、記錄日志量大

binlog_row_image=[FULL|MINMAL|NOBLOB]

show variable like ‘bingo_row_image’;

set session bingo_row_image=minimal;

三、混合日志格式:binlog_format=MIXED

特點:

1、根據SQL語句由系統決在基於段和基於行的日志格式中進行選擇

2、數據量的大小由所執行的SQL語句決定

建議使用mixed格式或者Row格式

binlog_format=row

binlog_row_image=minimal

復制類型

1、基於SQL語句的復制(SBR)

二進制日志格式使用的是statement格式

優點:

1.1、日志記錄量相對比較小,節約磁盤及網絡IO

1.2、並不強制要求主從資料庫的表設定完全相同

1.3、相比於基於行的復制方式更為靈活

缺點:

1、對於非確定性事件,無法保證主從復制數據的一致性

2、對於存儲過程,觸發器,自設定函數進行的修改也可能造成數據不一致

3、相比於基於行復制方式在從上執行時需要更多的鎖

2、基於行的復制(RBR)

二進制日志格式使用的是基於行的日志格式

優點:

1、可以應用於任何SQL的復制包括非確定函數,存儲過程等

2、可以減少資料庫鎖的使用

缺點:

1、要求主從資料庫的表結構相同,否則可能會中斷復制

2、無法在從上單獨執行觸發器

3、混合模式

根據實際內容在以上兩者間切換

復制工作方式

1、主將變更寫入二進制日志

2、從讀取主的二進制日志變更並寫入到relay_log中

2.1、基於日志點的復制

2.2、基於GTID的復制

3、在從上重放relay_log中的日志

3.1、基於SQL段的日志是從庫上重新執行記錄的SQL

3.2、基於行的日志則是在從庫上直接應用對資料庫行的修改

配置MySQL復制

基於日志的復制配置步驟

1、在主DB伺服器上建立復制賬號,然後授權

CREATE USER ‘real’ @’IP段”identified by ‘password’;

2、配置主資料庫伺服器

bin_log=mysql-bin

server_id=100(必須是唯一)

3、配置從資料庫伺服器

bin_log=mysql-bin

server_id=101

relay_log=mysql-relay-bin

log_slave_update=no(可選)

read_only=no(可選)

4、初始化從伺服器數據

方法1:mysqldump – -master-data=2 -single-transaction

方法2:xtrabackup – -slave-info(如果隻使用innodb,不會出現鎖表操作)

5、啟動復制連路

優點:

1、是MySQL最早支持的復制技術,Bug相對比較少

2、對SQL查詢沒有任何限制

3、故障處理比較容易

缺點:

1、故障轉移時重新獲取新主的日志點信息比較困難

5-6

發佈留言