一、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。