虽然该upgrade cluster
命令可用于执行 NDB Cluster 的降级(请参阅upgrade
cluster
命令的描述以了解适用的限制),但当涉及
不支持就地降级的mysqld降级时,需要执行特殊步骤。例如,从 NDB Cluster 7.5 降级到 7.4 涉及将 MySQL 服务器从 5.7 和 5.6 降级,为此必须使用逻辑降级方法(
有关降级
mysqld的信息,请参阅降级路径)。本节说明在这种情况下要采取的步骤。让我们以这个示例集群为例:
mcm> show status -r mycluster;
+--------+----------+----------+---------+-----------+----------+
| NodeId | Process | Host | Status | Nodegroup | Package |
+--------+----------+----------+---------+-----------+----------+
| 49 | ndb_mgmd | tonfisk | running | | 7.5-DMR1 |
| 1 | ndbmtd | flundra | running | 0 | 7.5-DMR1 |
| 2 | ndbmtd | grindval | running | 0 | 7.5-DMR1 |
| 50 | mysqld | flundra | running | | 7.5-DMR1 |
| 51 | mysqld | grindval | running | | 7.5-DMR1 |
| 52 | ndbapi | * | added | | |
+--------+----------+----------+---------+-----------+----------+
假设 NDB Cluster 已经从 7.4 版升级到 7.5 版,然后用户遇到了一个主要问题,现在需要将集群恢复到 7.4 版,这些是要遵循的步骤:
备份所有集群数据:
mcm> backup cluster mycluster; +-------------------------------+ | Backup completed successfully | +-------------------------------+
使用mysqldump从每个mysqld节点 备份非 NDB 数据。
假设您要降级到的较低版本 NDB Cluster 的包仍然可用于 MySQL Cluster Manager(如果不是这种情况,请使用
add package
命令提供包),使用upgrade cluster
命令和–-nodeid
选项降级管理和数据节点:mcm> upgrade cluster -P 7.4.10 --nodeid=49,1,2 --retry mycluster; +-------------------------------+ | Cluster upgraded successfully | +-------------------------------+
请记住在该选项中包含所有管理节点和数据节点
–-nodeid
,但忽略任何mysqld节点。该show status
命令显示哪些节点现在已降级:mcm> show status -r mycluster; +--------+----------+----------+---------+-----------+----------+ | NodeId | Process | Host | Status | Nodegroup | Package | +--------+----------+----------+---------+-----------+----------+ | 49 | ndb_mgmd | tonfisk | running | | 7.4.10 | | 1 | ndbmtd | flundra | running | 0 | 7.4.10 | | 2 | ndbmtd | grindval | running | 0 | 7.4.10 | | 50 | mysqld | flundra | running | | 7.5-DMR1 | | 51 | mysqld | grindval | running | | 7.5-DMR1 | | 52 | ndbapi | * | added | | | +--------+----------+----------+---------+-----------+----------+
为每个mysqld 节点重新创建数据目录:
停止mysqld节点:
mcm> stop process 50 mycluster; +-------------------------------+ | Process stopped successfully | +-------------------------------+
删除mysqld 节点的数据目录并重新创建它,作为一个空文件夹:
user@host$ cd mcm_data/clusters/mycluster/50/ user@host$ rm -rf data user@host$ mkdir data
使用要降级到的 NDB Cluster 版本包中 的mysql_install_db脚本 初始化重新创建的数据目录 :
user@host$ /clusters/7.4/scripts/mysql_install_db \ --defaults-file=/mcm_data/clusters/mycluster/50/cfg/my.cnf \ --datadir=/mcm_data/clusters/mycluster/50/data --basedir=/clusters/7.4.10 \ > mysql_install_db.log 2>&1
(当您降级到 NDB Cluster 7.5 或更高版本时, 应该使用mysqld命令 初始化mysqld数据目录;有关详细信息,请参阅初始化数据目录。)
--initialize
使用 MySQL Cluster Manager重新启动mysqld节点(由于之前已经在管理和数据节点上执行降级,mcmd将使用您要降级到的集群版本的二进制文件 启动mysqld节点):
mcm> start process 50 mycluster; ERROR 9003 (00MGR): Tx {690be0d6 270 0 15} timed out on agent 0 @{19 0 50 Wait for mysqld to start} participants: 0@tonfisk:18620[X] 1@flundra:18620[ ] 2@grindval:18620[ ]
可能会出现如上所示的超时错误,这是由于在mysqld节点上仍要创建mcmd用户(这将在下一步中发生)。如果您足够快地执行下一步,就可以避免该错误。但即使发生错误,这里也没有问题,因为 mcmd将继续尝试连接到 mysqld节点。
在mysqld节点 上 重新创建
mcmd
用户 :mysql> CREATE USER 'mcmd'@'127.0.0.1' IDENTIFIED BY '<manager-password>'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'mcmd'@'127.0.0.1' IDENTIFIED BY \ '<manager-password>' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
将您之前使用mysqldump备份的非 NDB 数据 重新加载到mysqld节点上:
mysql -h 127.0.0.1 -P 3306 -u root -p < dumpfile.sql
对集群的每个mysqld节点 重复上面的步骤 4 及其每个子步骤 。
在所有mysqld节点降级并准备好它们的数据目录后, mcmd最终重新连接它们:
mcm> show status -r mycluster; +--------+----------+----------+---------+-----------+---------+ | NodeId | Process | Host | Status | Nodegroup | Package | +--------+----------+----------+---------+-----------+---------+ | 49 | ndb_mgmd | tonfisk | running | | 7.4.10 | | 1 | ndbmtd | flundra | running | 0 | 7.4.10 | | 2 | ndbmtd | grindval | running | 0 | 7.4.10 | | 50 | mysqld | flundra | running | | 7.4.10 | | 51 | mysqld | grindval | running | | 7.4.10 | | 52 | ndbapi | * | added | | | +--------+----------+----------+---------+-----------+---------+