文章目录
- 1.主从复制过滤复制的概念
- 2.通过从库层面实现过滤复制
- 2.1.从库过滤复制的参数
- 2.2.配置过滤复制
- 2.3.验证复制的准确性
1.主从复制过滤复制的概念
在MySQL主从复制集群中,既可以对全库进行主从复制,也可以对数据库实例中的某个数据库进行主从复制,对单个库进行主从复制的场景我们称为过滤复制,只对指定的库实现主从复制机制。
过滤复制可以在主库层面实现,也可以在从库层面实现。
- 主库层面实现过滤复制
- 主要针对两个参数来实现:
binlog_do_db
(白名单)和binlog_ingore_db
(黑名单),这两个参数是声明那些数据库记录binlog日志,我们将要进行主从复制的数据库配置在白名单中,此时主库只会针对这一个库记录binlog,从库的i/O线程拿到的binlog也只是针对这一个库的,从而实现只对这一个库进行主从复制。 - 应用很少,因为一个数据库中不可能只有一个数据库,binlog是十分重要的,不会只对某个库记录binlog。
- 主要针对两个参数来实现:
- 从库层面实现过滤复制
- 从库层面实现过滤复制,主要是有SQL线程实现的,I/O线程正常接收主库传来的全库Binlog,SQL线程在执行这些Binlog时,根据配置的过滤复制参数,只执行与这个库相关的binlog日志,从而实现过滤复制。
- I/O线程还是会接受来自主库的所有库的Binlog,在
show slave status
中是可以看到即使不是过滤的库,产生的Binlog也会增长,就说明I/O线程接收的是全库的Binlog,SQL线程执行时只执行我们过滤的数据库的Binlog。
2.通过从库层面实现过滤复制
只复制db_1数据库。
2.1.从库过滤复制的参数
#这些参数需要配置到从库的配置文件中
replicate_do_db= #要复制那些数据库
replicate_ignore_db= #不要复制那些数据库
replicate_do_table= #要复制那些表
replicate_ignore_table= #不要复制那些表
replicate_wild_do_table= #要复制那些表,模糊匹配
replicate_wild_ignore_table= #不要复制那些表,模糊匹配
2.2.配置过滤复制
在从库的配置文件里操作。
[root@mysql-2 ~]# vim /etc/my3307.cnf
[mysqld]
replicate_do_db=db_1
[root@mysql-2 ~]# systemctl restart mysqld3307
此时只会复制db_1数据库产生的操作。
2.3.验证复制的准确性
在db_1数据库中创建一个表,写入数据,验证是否会被复制到从库。
mysql> use db_1;
mysql> create table yubiao (id int);
mysql> insert into yubiao values(1),(2);
mysql> select * from yubiao;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
db_1数据库只要有操作就会被复制到从库。
再创建一个db_5数据库观察是否会同步。
mysql> create database db_5;
db_5数据库不会被复制过去。