MySQL复制过滤参数解释

MySQL复制过滤参数解释_第1张图片MySQL复制过滤参数解释_第2张图片MySQL复制过滤参数解释_第3张图片

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

你可能感兴趣的:(MySQL数据库-复制)