MySQL复制-过滤规则

2020-04-13  本文已影响0人  月饮沙

本文问题

  1. 如何只复制部分数据到从库上?过滤机制是在主库上还是在从库上实现的?
  2. 要只复制主库中的一部分内容到从库,可以在哪几个级别进行数据的过滤,涉及的相关选项有哪些?
  3. 如何设置只记录部分更新语句到二进制日志中,评估的规则是怎样的?
  4. 在从库上,通过哪几个选项可以在数据库级别控制哪些语句在从库上执行?评估规则是怎样的?
  5. 在从库上,通过哪几个选项可以在表级别控制哪些语句在从库上执行?评估规则是怎样的?

过滤规则

ignore表示忽略,do表示记录或执行

主库上的过滤

未记录在主库二进制日志中的更改不会复制到从库上
通过--binlog-do-db--binlog-ignore-db来控制写入主库的二进制记录

  1. 如果不存在--binlog-do-db--binlog-ignore-db,记录到日志中
  2. 存在选项但是没有使用USE选择默认数据库,忽略这个语句(但是实际测试不使用USE的DDL语句也会进行记录
  3. 检查--binlog-do-db。如果不存在--binlog-do-db选项,进行下一步
  4. 检查--binlog-ignore-db

从库上的过滤

在从库上,通过一系列的--replicate-*选项来确定执行或忽略哪些语句。也可以通过GHANGE REPLICATEION FILTER语句来动态设置过滤器。
首先检查数据库级别的过滤选项--replicate-do-db,--replicate-ignore-db
如果没有数据库级别的过滤选项,MySQL检查表级别的过滤选项
如果存在一个或多个数据库级别的过滤选项,不在这些选项中的库的语句不会执行。

数据库级复制的过滤

通过--replicate-do-db--replicate-ignore-db控制哪些数据库的更改在从库上执行

  1. 首先根据binlog_format确定默认数据库,对于STATEMENT格式的记录,默认数据库是使用USE指定的,对于ROW格式的记录,默认数据库是更新的数据所在的库
  2. 查看是否存在--replicate-do-db选项,如果存在,则默认数据库在--replicate-do-db中的更新会进行下一步表级别的过滤,不在其中的库不会在从库上更新。
  3. 查看是否存在--replicate-ignore-db选项,如果存在,在默认数据库包括在--replicate-ignore-db中的更新不会在从库上执行,其他库的更新进行下一步表级别的过滤

表级复制的过滤

通过--replicate-do-table--replicate-wild-do-table--replicate-ignore-table,--replicate-wild-ignore-table选项控制表级别的过滤

区别:
--replicate-do-table--replicate-ignore-table每次只能指定一个表,指定多个表需要多次设置,示例:--replicate-do-table:channel_1:db_name.tbl_name
--replicate-wild-do-table--replicate-wild-ignore-table 支持通配符,示例:--replicate-wild-do-table=foo%.bar%

  1. 是否存在表级别的过滤选项,如果没有,执行语句
  2. 如果存在表级别的过滤选项,按照以下顺序进行检查
    • --replicate-do-table
    • --replicate-ignore-table
    • --replicate-wild-do-table
    • --replicate-wild-ignore-table

问题答案

  1. 如何只复制部分数据到从库上?过滤机制是在主库上还是在从库上实现的?
    使用replication*选项来控制数据的过滤,过滤是在从库上实现的,主库上的所有二进制日志都会传输到从库上,从库根据过滤规则来决定执行其中的哪些事务
  2. 要只复制主库中的一部分内容到从库,可以在哪几个级别进行数据的过滤,涉及的相关选项有哪些?
  1. 如何设置只记录部分更新语句到二进制日志中,评估的规则是怎样的?
    --binlog-do-db,--binlog-ignore-db
  1. 在从库上,通过哪几个选项可以在数据库级别控制哪些语句在从库上执行?评估规则是怎样的?
    --replicate-do-db--replicate-ignore-db
  1. 在从库上,通过哪几个选项可以在表级别控制哪些语句在从库上执行?评估规则是怎样的?
    --replicate-do-table,--replicate-wild-do-table--replicate-ignore-table,--replicate-wild-ignore-table
    如果存在表级别的过滤选项,按照以下顺序进行检查
    --replicate-do-table
    --replicate-ignore-table
    --replicate-wild-do-table
    --replicate-wild-ignore-table
上一篇 下一篇

猜你喜欢

热点阅读