MySQL——复制过滤和半同步复制

文章目录

  • 半同步复制
  • 复制过滤

半同步复制

半同步复制主要是为了考虑和解决主从数据一致性的问题,5.5-5.6版本出现的这个功能,然后在5.7版本以后因为出现了MGR复制,就完全的被MGR进行代替了,现在主要是跟MGR进行对比的。

半同步复制和普通主从的说明
1、普通主从:主库dump_thread发送给IO_thread数据,IO接收到数据写入缓存以后马上就返回ACK了,不来管你后面是否落到磁盘(relaylog),所以万一传到缓存就宕机了,就会造成主从数据不一致的问题。

2、半同步复制:当dump_thread发送给IO_thread数据时,IO_thread会把数据写入内存,并且当数据写入磁盘以后才会返回给dump_thread相应的ACK包,告诉dump接收完成了,否则dump_thread会阻塞,主库必须要等到ACK返回,这个ACK接收是由主库的receiver_thread进行接收的,并且告诉主库,从库接收到数据了,然后再接着后面的数据传输,是当数据库开启半同步复制以后生成,跟TCP/IP的ACK不是同一样东西。
MySQL——复制过滤和半同步复制_第1张图片
现在的话这种技术已经差不多被MGR进行代替了,过段时间会出MGR(MySQL Group Replication)的实现和配置内容。

复制过滤

复制过滤主要是为了来解决主从复制的时候,主库中各种不同库往从库复制单个库或者多个库的一种功能,例:主库中有ABCD4个库,分别要往3个从库中复制,从库1只复制A库,从库2只复制B库,从库3只复制C库,这种主从复制就是复制过滤的一种。

复制过滤的相关参数:
主库:

Binlog_Do_DB			binlog白名单,如果开启,在白名单里的库才进行生成binlog
Binlog_Ignore_DB		binlog黑名单,在这个列表里的库不生成binlog

从库:

Replicate_Do_DB:			白名单表示复制的库
Replicate_Ignore_DB:		黑名单表示不复制的库
Replicate_Do_Table:			白名单里为复制的表
Replicate_Ignore_Table:		黑名单里为不复制的表
Replicate_Wild_Do_Table:	白名单模糊复制表
Replicate_Wild_Ignore_Table:黑名单模糊不复制表

相关配置

从库中配置:
vim /opt/mysql-replication/mysql3330/my.cnf
replicate_do_db=test			只匹配小写,所以首字母都需要小写
systemctl restart mysqld3330
进到从库
Replicate_Do_DB: test
这一列就表示test加入白名单,在主库中只复制test的binlog操作
主库中做以下操作:
create database test charset utf8mb4;
create database test2 charset utf8mb4;
[(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test2              |
+--------------------+
6 rows in set (0.00 sec)
在从库中看的到现象:
[(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

这个就是复制过滤的其中之一,也是复制过滤的一个小实验!

你可能感兴趣的:(数据库层面)