复制过滤器的原理就是,主节点只复制一个或一部分数据库的数据到从节点上,并非所有复制;
mysql
复制过滤器能够设置相似“黑白名单”的功能,来设置哪些数据能够复制到从节点,哪些是不能够的sql
复制过滤器有两种实现:一是在主节点配置,一是在从节点配置数据库
在主节点配置复制过滤器缺点就是二进制日志记录的是某一库的数据信息,而不会记录其余库信息,这样当其余库故障时就没法从二进制日志进行重放恢复。bash
因此,通常不会在主节点配置过滤;
ide
在从节点配置复制过滤就比较经常使用了,可是也有缺点,就是增长IO读写的压力,由于主节点记录全部库的二进制日志信息依然会被从节点IO线程读取,并存储在测试
从节点的中继日志中,因为设置了过滤,在从节点执行SQL线程时只会重放未被过滤掉的操做;线程
下面举个例子说明:日志
在从节点配置过滤器ip
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表,那么此表会被复制到从节点。
实验结束