MySQL
适用环境:RHEL/OEL 7/9 Linux
1. 升级概述
MySQL 集群升级是一个复杂的过程,需要仔细规划和执行,以确保服务的高可用性和数据的一致性。本指南提供了不同类型 MySQL 集群的升级步骤和注意事项。
更多视频教程www.fgedu.net.cn 学习交流加群风哥QQ113257174 风哥提示:数据库升级过程中请确保备份完整数据,以防意外情况发生。 学习交流加群风哥微信: itpux-com 学习交流加群风哥QQ113257174 更多学习教程公众号风哥教程itpux_com 风哥提示:数据库升级过程中请确保备份完整数据,以防意外情况发生。
1.1 支持的升级路径
- MySQL 5.7 集群 → MySQL 8.0 集群
- MySQL 8.0 集群 → MySQL 8.4 集群
- MySQL 8.4 集群 → MySQL 9.7 集群
1.2 升级策略
- 滚动升级:逐个节点升级,保持集群可用性
- 停机升级:停止整个集群进行升级,适用于维护窗口
2. 升级前准备
2.1 备份数据库
# 在主节点上备份所有数据库
mysqldump --all-databases --single-transaction --routines --triggers > all_databases_backup.sql
# 备份配置文件
cp /etc/my.cnf /etc/my.cnf.bak
# 备份集群配置文件(如MHA配置)
cp /etc/masterha/masterha_default.cnf /etc/masterha/masterha_default.cnf.bak
提示:确保备份文件存储在安全的位置,并且备份过程完成后验证备份文件的完整性。
2.2 检查集群状态
# 检查主从复制状态
mysql -u root -p -e "SHOW SLAVE STATUS\G;"
# 检查MGR集群状态
mysql -u root -p -e "SELECT * FROM performance_schema.replication_group_members;"
# 检查InnoDB Cluster状态
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.status();"
2.3 准备升级包
# 下载MySQL 8.0仓库
cd /tmp
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装仓库
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
3. 主从复制集群升级
3.1 升级从节点
- 停止从节点服务:
- 升级从节点:
- 启动从节点服务:
- 运行升级检查脚本:
- 重启从节点服务:
- 检查从节点状态:
systemctl stop mysqld
yum install -y mysql-community-server
systemctl start mysqld
mysql_upgrade -u root -p
systemctl restart mysqld
mysql -u root -p -e "SHOW SLAVE STATUS\G;"
3.2 升级主节点
- 将主节点切换为从节点(可选):
- 停止原主节点服务:
- 升级原主节点:
- 启动原主节点服务:
- 运行升级检查脚本:
- 重启原主节点服务:
- 将原主节点恢复为主节点(如果需要):
# 在原主节点上
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='new-master', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=154;
START SLAVE;
systemctl stop mysqld
yum install -y mysql-community-server
systemctl start mysqld
mysql_upgrade -u root -p
systemctl restart mysqld
# 在新主节点上
STOP SLAVE;
RESET MASTER;
# 在其他从节点上
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='original-master', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1;
START SLAVE;
4. MHA 集群升级
4.1 升级MHA Manager
# 停止MHA Manager服务
masterha_stop --conf=/etc/masterha/app1.cnf
# 升级MHA Manager
pip install --upgrade mysql-mha
# 启动MHA Manager服务
masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover &
4.2 升级MHA Node
- 在从节点上停止MHA相关服务:
- 升级MySQL:
- 启动MySQL服务:
- 运行升级检查脚本:
- 重启MySQL服务:
- 检查复制状态:
- 升级MHA Node:
systemctl stop mysqld
yum install -y mysql-community-server
systemctl start mysqld
mysql_upgrade -u root -p
systemctl restart mysqld
mysql -u root -p -e "SHOW SLAVE STATUS\G;"
pip install --upgrade mysql-mha
4.3 升级主节点
- 执行故障转移,将主节点切换到从节点:
- 在原主节点上升级MySQL:
- 将原主节点配置为从节点:
- 更新MHA配置:
- 检查MHA状态:
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=slave1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
systemctl stop mysqld
yum install -y mysql-community-server
systemctl start mysqld
mysql_upgrade -u root -p
systemctl restart mysqld
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='new-master', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1;
START SLAVE;
vi /etc/masterha/app1.cnf
# 更新主节点信息
masterha_check_status --conf=/etc/masterha/app1.cnf
5. MGR 集群升级
5.1 升级MGR集群
- 检查集群状态:
- 逐个节点升级:
- 检查节点状态:
mysql -u root -p -e "SELECT * FROM performance_schema.replication_group_members;"
# 在节点上
STOP GROUP_REPLICATION;
systemctl stop mysqld
yum install -y mysql-community-server
systemctl start mysqld
mysql_upgrade -u root -p
systemctl restart mysqld
START GROUP_REPLICATION;
mysql -u root -p -e "SELECT * FROM performance_schema.replication_group_members;"
6. InnoDB Cluster 升级
6.1 升级MySQL Shell
rpm -ivh mysql-shell-8.0.28-1.el7.x86_64.rpm
6.2 升级InnoDB Cluster
- 检查集群状态:
- 逐个实例升级:
- 检查集群状态:
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.status();"
# 在实例上
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.removeInstance('root@instance1:3306');"
systemctl stop mysqld
yum install -y mysql-community-server
systemctl start mysqld
mysql_upgrade -u root -p
systemctl restart mysqld
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.addInstance('root@instance1:3306');"
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.status();"
6.3 升级MySQL Router
systemctl stop mysqlrouter
rpm -ivh mysql-router-8.0.28-1.el7.x86_64.rpm
mysqlrouter --bootstrap root@instance1:3306 --user=mysqlrouter
systemctl start mysqlrouter
7. 升级后验证
7.1 验证集群状态
# 主从复制集群
mysql -u root -p -e "SHOW SLAVE STATUS\G;"
# MHA集群
masterha_check_status --conf=/etc/masterha/app1.cnf
# MGR集群
mysql -u root -p -e "SELECT * FROM performance_schema.replication_group_members;"
# InnoDB Cluster
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.status();"
7.2 验证数据一致性
# 在主节点上创建测试数据
mysql -u root -p -e "CREATE DATABASE test_upgrade; USE test_upgrade; CREATE TABLE test_table (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)); INSERT INTO test_table (name) VALUES ('Test');"
# 在从节点上验证数据
mysql -u root -p -e "SELECT * FROM test_upgrade.test_table;"
7.3 验证应用程序连接
测试应用程序是否能够正常连接到升级后的 MySQL 集群。
学习交流加群风哥QQ113257174 更多视频教程www.fgedu.net.cn 更多学习教程公众号风哥教程itpux_com 更多视频教程www.fgedu.net.cn 更多视频教程www.fgedu.net.cn 更多视频教程www.fgedu.net.cn 更多视频教程www.fgedu.net.cn
8. 故障排查
8.1 常见问题及解决方法
8.1.1 复制中断
# 检查错误日志
cat /var/log/mysqld.log | grep "ERROR"
# 检查复制状态
mysql -u root -p -e "SHOW SLAVE STATUS\G;"
# 修复复制
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
8.1.2 MGR 节点无法加入集群
# 检查错误日志
cat /var/log/mysqld.log | grep "group_replication"
# 重置节点
STOP GROUP_REPLICATION;
RESET MASTER;
START GROUP_REPLICATION;
8.1.3 InnoDB Cluster 状态异常
# 检查集群状态
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.status();"
# 修复集群
mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.rejoinInstance('root@instance1:3306');"
8.1.4 MySQL Router 连接失败
# 检查Router日志
cat /var/log/mysqlrouter/mysqlrouter.log
# 重新引导Router
mysqlrouter --bootstrap root@instance1:3306 --user=mysqlrouter
8.2 回滚策略
# 1. 停止当前服务
systemctl stop mysqld
# 2. 卸载当前版本
yum remove mysql-community-server
# 3. 安装之前的版本
yum install mysql-community-server-5.7.38
# 4. 恢复备份
mysql -u root -p < all_databases_backup.sql
# 5. 重启服务
systemctl start mysqld
警告:本指南仅供参考,实际升级时请根据具体环境进行调整。在生产环境中,建议先在测试环境中进行升级测试。
提示:升级完成后,建议定期监控集群状态,确保所有节点正常运行,数据一致性良好。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
