在前面我们讲到了,MySQL Cluster 集群环境能够正常运行的一个条件是只支持 NDB 的存储引擎,究竟是不是这样呢?这一小节,我们就来对这个问题进行测试。
我们此次主要分成两部分进行测试。
- 第一部分:在一个 SQL 节点上,创建一个非 NDB 存储引擎的表,然后在另一个 SQL 节点上观察这张表的同步情况。
- 第二部分:在一个 SQL 节点上,创建一个 NDB 存储引擎的表,然后在另一个 SQL 节点上观察这张表的同步情况,同时对这个表做增删改操作,在另一个节点上观察其变化情况。
分成两部分进行测试,可以检测出 MySQL Cluster 对于 NDB 和非 NDB 存储引擎在数据同步上是否有区别,最终验证前面讲到的 MySQL Cluster 集群环境只适用于 NDB 存储引擎这一结论。
明确了测试思路之后,接下来我们要先创建一个数据库(登录到 mysql04 节点上进行创建数据库的操作),数据库的名字命名为 testdb。如下所示:
[mysql@mysql04 ~]$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.36-ndb-7.6.20-cluster-gpl MySQL Cluster Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database testdb; Query OK, 1 row affected (0.03 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | ndbinfo | | performance_schema | | sys | | testdb | +--------------------+ 6 rows in set (0.00 sec)
然后登录到 mysql05 节点上进行查看,testdb 是否同样可以看到。
[mysql@mysql05 ~]$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.36-ndb-7.6.20-cluster-gpl MySQL Cluster Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | ndbinfo | | performance_schema | | sys | | testdb | +--------------------+ 6 rows in set (0.00 sec)
OK,上述内容说明当前 MySQL Cluster 集群的整体运行情况是正常的,接下来我们开始测试。
非 NDB 存储引擎
在 mysql04 节点上创建一张 InnoDB 存储引擎的表 t1,并对其插入两条数据。
mysql> use testdb Database changed mysql> create table t1 (id int,name char(10)) engine=innodb; Query OK, 0 rows affected (0.05 sec) mysql> insert into t1 (id,name) values(1,'a'),(2,'b'); Query OK, 2 rows affected (0.07 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t1; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | +------+------+ 2 rows in set (0.00 sec)
然后登录到 mysql05 节点上,查看是否已同步过来。
mysql> use testdb; Database changed mysql> show tables; Empty set (0.01 sec)
可以看到,对于 InnoDB 存储引擎的表 MySQL Cluster 集群环境不支持同步功能。其实不止是 InnoDB存储引擎,对于其它的非 NDB 存储引擎的数据,MySQL Cluster 集群架构同样是不支持的。
接下来,我们来看一下 NDB 存储引擎表的情况是怎么样的?
NDB存储引擎
在 mysql04 节点上创建一张 NDB 存储引擎的表 t2,并对其插入两条数据。
mysql> use testdb; Database changed mysql> create table t2 (id int,name char(10)) engine=ndb; Query OK, 0 rows affected (0.12 sec) mysql> insert into t2(id,name) values(1,'a'),(2,'b'); Query OK, 2 rows affected (0.05 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t2; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | +------+------+ 2 rows in set (0.00 sec)
然后,我们登录到 mysql05 节点上进行查看。
mysql> use testdb; Database changed mysql> show tables; +------------------+ | Tables_in_testdb | +------------------+ | t2 | +------------------+ 1 row in set (0.01 sec) mysql> select * from t2; +------+------+ | id | name | +------+------+ | 2 | b | | 1 | a | +------+------+ 2 rows in set (0.08 sec)
我们看到,对于 NDB 存储引擎的表 t2,已经同步到了 mysql05 节点上,同时对于表 t2 中的数据,在mysql05 节点上也是可以进行查看的。
为了验证其完整的同步功能,我们在 mysql05 节点上对 t2 表做一个 update 操作,然后在 mysql04 节点上查看,是否同样生效。
接下来,我们在 mysql05 节点上将 t2 表中 id=2 这行数据的 name 字段改为了'bbb'。
mysql> update t2 set name='bbb' where id=2; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t2; +------+------+ | id | name | +------+------+ | 2 | bbb | | 1 | a | +------+------+ 2 rows in set (0.00 sec)
然后登录到 mysql04 节点上进行查看。
mysql> select * from t2; +------+------+ | id | name | +------+------+ | 2 | bbb | | 1 | a | +------+------+ 2 rows in set (0.00 sec)
我们可以看到,对于 update 的操作,同样是可以同步的(当然对于 delete 等操作均是支持的,在这里我就不再演示了)。
经过上面的测试,我们可以得出明确的答案:对于 MySQL Cluster 集群架构仅支持 NDB 存储引擎。这一小节我们就讲到这里,在下一小节中,我们来讲解 SQL 节点故障修复方面的内容。