mysql BLACKHOLE存储引擎,任何发送到该引擎的数据都会被抛弃,语句执行结果为空。
mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE; Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM test; Empty set (0.00 sec) |
在mysql的大规模集群架构应用中,当出现多台从库都连接到某一主库上进行binlog复制,主库在承担高并发写入压力下,还需要开启多个线程与从库进行通信,产生大量的IO操作,对主库造成过大压力。
为了达到集群架构负载均衡的初衷,可以在主库与从库之间建立一个单独的BLACKHOLE节点,该节点负责1、从主库复制binlog;2、开启多线程把binlog发送给各个从库节点。BLACKHOLE节点从主库复制binlog之后执行,并不存储数据,只保留binglog日志。
mysql的集群架构设计中,采用了流水线模式,把与多个从库通信的工作独立出来,设置一个单独的BLACKHOLE节点专注与向从库复制binlog工作,把复制工作从主库中剥离出来,减轻主库IO压力。