MySQL複製過濾參數解釋

一、binlog-do-db

SBR,基於語句的複製。當default database(use db_name)和binlog-do-db參數配置的庫一致時,執行的語句全部被binlog,而不管該語句執行的更改是針對哪個數據庫。

比如:

--binlog-do-db=sales

基於語句的複製,下面的語句:

USE sales; #指定默認數據庫爲sales,和binlog-do-db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10; #這條語句要被binlog,儘管其更新的是prices數據庫。

但是對於下面的語句:

USE prices; #指定默認數據庫爲prices,和binlog-do-db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句不會被binlog,儘管其更新的是binlog-do-db參數配置的庫。

RBR,基於行記錄的複製。只要是更改binlog-do-db參數配置的庫下的對象,這樣的語句都要被binlog,而不管defaultdatabase(use db_name)和binlog-do-db參數配置的庫是否一致。

比如:

--binlog-do-db=sales

基於行記錄的複製,下面的語句:

USE prices; #指定默認數據庫爲prices,雖然和binlog-do-db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句要被binlog,因爲其更新的是binlog-do-db參數配置的庫。

但是對於下面的語句:

USE sales; #指定默認數據庫爲sales,和binlog-do-db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10; #這條語句不會被binlog,因爲其更改的不是binlog-do-db參數配置的庫。

MBR

對於基於混合模式的呢?混合模式,mysql是優先採用RBR,而RBR無法有效保證複製成功時,自動轉換爲SBR

說錯了,是優先採用SBR,當SBR無法保證時,自動轉換爲RBR。

二、binlog-ignore-db

同參數binlog-do-db一樣,SBR和RBR有不同的表現。

SBR,基於語句的複製。當default database(use db_name)和binlog- ignore -db參數配置的庫一致時,執行的語句全部不會被binlog,而不管該語句執行的更改是針對哪個數據庫。

比如:

--binlog- ignore-db=sales

基於語句的複製,下面的語句:

USE sales; #指定默認數據庫爲sales,和binlog- ignore -db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10;

UPDATEsales.january SET amount=amount+1000;  #這兩條語句都不會被binlog,因爲當前default database 和binlog- ignore -db參數配置的庫一致。

RBR,基於行記錄的複製。只要是更改binlog- ignore -db參數配置的庫下的對象,這樣的語句都不會被binlog,而不管defaultdatabase(use db_name)和binlog- ignore -db參數配置的庫是否 一致。

比如:

--binlog- ignore-db=sales

基於行記錄的複製,下面的語句:

USE prices; #指定默認數據庫爲prices,雖然和binlog- ignore -db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句不會被binlog,因爲其更新的是binlog- ignore -db參數配置的庫。

三、replicate-do-db

SBR,基於語句的複製。當主庫的binlog的default database(use db_name)和replicate-do-db參數配置的庫一致時,語句全部要被重演,而不管這些語句實際更改的是哪個數據庫。

比如:

replicate-do-db=sales

基於語句的複製,下面的語句:

USE sales; #指定默認數據庫爲sales,和replicate-do-db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10;

UPDATEsales.january SET amount=amount+1000;  #這兩條語句都會被重演,因爲當前defaultdatabase 和replicate-do-db參數配置的庫一致。

但是下面的語句:

USE prices; #指定默認數據庫爲prices,和replicate-do-db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句不會被重演,儘管其更新的是replicate-do-db參數配置的庫。

RBR,基於行記錄的複製。只要語句實際更改的數據庫和replicate-do-db參數配置的庫一致,則實施重演,而不管當前的default database是哪個。

比如:

replicate-do-db=sales

基於行記錄的複製,下面的語句:

USE sales; #指定默認數據庫爲sales,和replicate-do-db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10; #這條語句不會被重演,因爲其更新是prices庫, 和replicate-do-db參數配置的庫不一致。

UPDATEsales.january SET amount=amount+1000;  #這兩條語句都會被重演

並且下面的語句:

USE prices; #指定默認數據庫爲prices,和replicate-do-db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句也會被重演,因爲其更新的是replicate-do-db參數配置的庫。

四、replicate-do-table

表級過濾,所以僅僅能過濾表。replicate-do-table=db_name.tbl_name,告訴SQL線程僅僅重演db_name.tbl_name表的更改。

這與SBR和RBR無關。

五、replicate-ignore-db

SBR,基於語句的複製。當主庫的binlog的default database(use db_name)和replicate-ignore-db參數配置的庫一致時,語句全部不會被重演,而不管這些語句實際更改的是哪個數據庫。

比如:

replicate- ignore-db=sales

基於語句的複製,下面的語句:

USE sales; #指定默認數據庫爲sales,和replicate- ignore -db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10;

UPDATEsales.january SET amount=amount+1000;  #這兩條語句都不會被重演,因爲當前defaultdatabase 和replicate- ignore-db參數配置的庫一致。

但是下面的語句:

USE prices; #指定默認數據庫爲prices,雖然和replicate- ignore -db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句也不會被重演

RBR,基於行記錄的複製。只有實際更改的數據庫和replicate- ignore -db參數配置的庫一致的語句,纔不實施重演,而不管當前的default database是哪個。

比如:

replicate- ignore-db=sales

基於行記錄的複製,下面的語句:

USE sales; #指定默認數據庫爲sales,和replicate-do-db參數配置的庫一致

UPDATEprices.discounts SET percentage = percentage + 10; #這條語句不會被重演,因爲其更新是prices庫, 和replicate-do-db參數配置的庫不一致。

UPDATEsales.january SET amount=amount+1000;  #這兩條語句都會被重演

並且下面的語句:

USE prices; #指定默認數據庫爲prices,和replicate-do-db參數配置的庫不一致

UPDATEsales.january SET amount=amount+1000;  #這條語句也會被重演,因爲其更新的是replicate-do-db參數配置的庫。

六、replicate-ignore-table

表級過濾,所以僅僅能過濾表。replicate-ignore-table=db_name.tbl_name,告訴SQL線程db_name.tbl_name表的更改不重演。

這與SBR和RBR無關。並且如果,一個語句更新了db_name.tbl_name和其他表,那麼這條語句同樣不會被重演。

七、replicate-rewrite-db

replicate-rewrite-db="olddb->newdb",slave把use olddb替換爲 use newdb,只有針對表操作的語句纔有效(不包括create database,drop database,alter database),並且olddb必須是master的默認數據庫(use 指定)。該選項不會重寫語句。不支持跨庫更新。

八、replicate-wild-do-table

replicate-wild-do-table:類似數據庫like方式指定多個匹配的表,行爲類似replicate-do-table。

九、replicate-wild-ignore-table

replicate-wild-ignore-table:類似數據庫like方式指定多個匹配的表,行爲類似replicate-ignore-table。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章