MySQL复制过滤器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL复制过滤器相关的知识,希望对你有一定的参考价值。

复制过滤器的原理就是,主节点只复制一个或一部分数据库的数据到从节点上,并不是全部复制;

复制过滤器可以设置类似“黑白名单”的功能,来设置哪些数据可以复制到从节点,哪些是不可以的

复制过滤器有两种实现:一是在主节点配置,一是在从节点配置

在主节点配置复制过滤器缺点就是二进制日志记录的是某一库的数据信息,而不会记录其他库信息,这样当其他库故障时就无法从二进制日志进行重放恢复。

所以,一般不会在主节点配置过滤;    

在从节点配置复制过滤就比较常用了,但是也有缺点,就是增加IO读写的压力,因为主节点记录所有库的二进制日志信息依然会被从节点IO线程读取,并存储在

从节点的中继日志中,由于设置了过滤,在从节点执行SQL线程时只会重放未被过滤掉的操作;


下面举个例子说明:

在从节点配置过滤器

STOP SLAVE;
#首先将从节点的功能关闭
SET @@global.replicate_ignore_table=‘mydb.tbl‘;
#我们将mydb数据库中的tbl表过滤掉,即从节点的mysql数据库不会包含此表
START SLAVE IO_THREAD,SQL_THREAD;
#开启从节点的IO和SQL线程
#配置完成,接下来测试

测试

 create database mydb;  
 #在主节点创建数据库mydb,此时在从节点上是能够同步此库的
 create table tbl(id int primary key,name char(30));
 #在主节点创建mydb.tbl表,然后在从节点查看此表是否被过滤
MariaDB [mydb]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.101  #主节点host
                  Master_User: repluser  #主节点授权复制的账户
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003  #要复制的主节点的二进制日志
          Read_Master_Log_Pos: 936   #从此二进制日志的什么位置开始复制
               Relay_Log_File: relay-log.000007  #从节点的中继日志,即将二进制日志通过IO读入中继日志的
                Relay_Log_Pos: 643
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: Yes  #从节点的IO功能是否开启,重要
            Slave_SQL_Running: Yes  #从节点的SQL功能是否开启,重要
              Replicate_Do_DB:   #白名单,Do表示允许,即不过滤
          Replicate_Ignore_DB:   #黑名单,Ignore表示拒绝,即过滤,除了数据库,还可以对表做过滤
           Replicate_Do_Table: 
       Replicate_Ignore_Table: mydb.tbl  #ignore表示黑名单即过滤,所以我们在从节点show tables;是看不到此表的
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 936
              Relay_Log_Space: 1216
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0  
        #从节点落后于主节点的时间,单位是秒。主节点写入时是并行执行,而从节点IO读取则是串行操作,所以当主节点频繁写入时,主从间的差异会越来越大
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0  #IO和SQL错误信息
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

由于我们在从节点设置的是过滤mydb.tbl表,但是如果在mydb库中创建tbl2表,那么此表会被复制到从节点。


实验结束

本文出自 “a_pan” 博客,谢绝转载!

以上是关于MySQL复制过滤器的主要内容,如果未能解决你的问题,请参考以下文章

MySQL复制过滤器

数据库 之 Mysql复制过滤器

有趣的 C++ 代码片段,有啥解释吗? [复制]

mysql半同步复制及复制过滤

MySQL 5.7在线设置复制过滤

MySQL过滤复制