1. 首页 > 软件安装教程 > 正文

MySQL升级-MySQL数据库升级详细过程

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 升级从节点

  1. 停止从节点服务:
  2. systemctl stop mysqld
  3. 升级从节点:
  4. yum install -y mysql-community-server
  5. 启动从节点服务:
  6. systemctl start mysqld
  7. 运行升级检查脚本:
  8. mysql_upgrade -u root -p
  9. 重启从节点服务:
  10. systemctl restart mysqld
  11. 检查从节点状态:
  12. mysql -u root -p -e "SHOW SLAVE STATUS\G;"
    

3.2 升级主节点

  1. 将主节点切换为从节点(可选):
  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;
    
  3. 停止原主节点服务:
  4. systemctl stop mysqld
  5. 升级原主节点:
  6. yum install -y mysql-community-server
  7. 启动原主节点服务:
  8. systemctl start mysqld
  9. 运行升级检查脚本:
  10. mysql_upgrade -u root -p
  11. 重启原主节点服务:
  12. systemctl restart mysqld
  13. 将原主节点恢复为主节点(如果需要):
  14. # 在新主节点上
    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

  1. 在从节点上停止MHA相关服务:
  2. systemctl stop mysqld
  3. 升级MySQL:
  4. yum install -y mysql-community-server
  5. 启动MySQL服务:
  6. systemctl start mysqld
  7. 运行升级检查脚本:
  8. mysql_upgrade -u root -p
  9. 重启MySQL服务:
  10. systemctl restart mysqld
  11. 检查复制状态:
  12. mysql -u root -p -e "SHOW SLAVE STATUS\G;"
    
  13. 升级MHA Node:
  14. pip install --upgrade mysql-mha

4.3 升级主节点

  1. 执行故障转移,将主节点切换到从节点:
  2. 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
    
  3. 在原主节点上升级MySQL:
  4. systemctl stop mysqld
    yum install -y mysql-community-server
    systemctl start mysqld
    mysql_upgrade -u root -p
    systemctl restart mysqld
    
  5. 将原主节点配置为从节点:
  6. mysql -u root -p
    CHANGE MASTER TO MASTER_HOST='new-master', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1;
    START SLAVE;
    
  7. 更新MHA配置:
  8. vi /etc/masterha/app1.cnf
    # 更新主节点信息
    
  9. 检查MHA状态:
  10. masterha_check_status --conf=/etc/masterha/app1.cnf
    

5. MGR 集群升级

5.1 升级MGR集群

  1. 检查集群状态:
  2. mysql -u root -p -e "SELECT * FROM performance_schema.replication_group_members;"
    
  3. 逐个节点升级:
  4. # 在节点上
    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;
    
  5. 检查节点状态:
  6. 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

  1. 检查集群状态:
  2. mysqlsh -u root -p -e "var cluster = dba.getCluster('myCluster'); cluster.status();"
    
  3. 逐个实例升级:
  4. # 在实例上
    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');"
    
  5. 检查集群状态:
  6. 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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息