美文网首页
MySQL复制-过滤规则

MySQL复制-过滤规则

作者: 月饮沙 | 来源:发表于2020-04-13 16:35 被阅读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-db--replicate-ignore-db同时存在时,--replicate-do-db的优先级更高,不在--replicate-do-db中的库不会在从库上复制。
  • binlog_format=ROW时,DML语句的默认数据库根据更新的内容自动获取,但是DDL语句的默认数据库需要通过USE指定

表级复制的过滤

通过--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. 要只复制主库中的一部分内容到从库,可以在哪几个级别进行数据的过滤,涉及的相关选项有哪些?
  • 主库binlog级别:--binlog-do-db--binlog-ignore-db
  • 从库数据库级别:--replicate-do-db,--replicate-ignore-db
  • 从库表级别:--replicate-do-table, --replicate-ignore-table--replicate-wild-do-table,--replicate-wild-ignore-table
  1. 如何设置只记录部分更新语句到二进制日志中,评估的规则是怎样的?
    --binlog-do-db,--binlog-ignore-db
  • 如果不存在--binlog-do-db和--binlog-ignore-db,记录到日志中
  • 存在选项但是没有使用USE选择默认数据库,忽略这个语句(但是实际测试不使用USE的DDL语句也会进行记录)
  • 检查--binlog-do-db
  • 检查--binlog-ignore-db
  1. 在从库上,通过哪几个选项可以在数据库级别控制哪些语句在从库上执行?评估规则是怎样的?
    --replicate-do-db--replicate-ignore-db
  • 首先根据binlog_format确定默认数据库,对于STATEMENT格式的记录,默认数据库是使用USE指定的,对于ROW格式的记录,默认数据库是更新的数据所在的库
  • 检查--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

相关文章

  • MySQL复制-过滤规则

    本文问题 如何只复制部分数据到从库上?过滤机制是在主库上还是在从库上实现的? 要只复制主库中的一部分内容到从库,可...

  • MySQL过滤复制

    主库配置过滤 白名单:只记录白名单中列出的库的二进制日志 binlog-do-db 黑名单:不记录黑名单列出的库的...

  • MySQL应用

    MySQL Replication: 1、主/从架构: 2、主主复制: 3、半同步复制 4、复制过滤器: 5、复制...

  • MySQL主从复制过滤

    MySQL主从复制是逻辑复制,基于Binlog进行主从数据传输,MySQL提供了丰富的参数来配置主从复制过滤条件。...

  • 在线修改主从复制选项

    前言: MySQL最常用的架构就是主从复制了,其实主从复制有很多选项,特别是在从库端,我们可以设置复制过滤,比如说...

  • MySQL之:复制过滤器

    复制过滤器 让从节点仅复制指定的数据库,或指定数据库的指定表 两种实现方式(建议用第2种): 服务器选项:主服务器...

  • 【tcpdump】tcpdump抓包工具教程

    tcpdump的host和net过滤规则 tcpdump的基于端口的过滤规则 tcpdump的基于协议的过滤规则 ...

  • 入坑MySQL组复制

    1. MySQL复制技术简介 1.1 MySQL复制技术的简介 MySQL的复制经历了如下几个阶段: 异步复制:最...

  • mysql 主从基础知识笔记

    mysql 主从同步 mysql 主从,其实也就是mysql 复制了, mysql 主从复制的原理就是从服务器复制...

  • Mysql 主从复制

    Mysql 主从复制 MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据...

网友评论

      本文标题:MySQL复制-过滤规则

      本文链接:https://www.haomeiwen.com/subject/iphnmhtx.html