MySQL 8.0.31到8.0.37小版本升级实战:RPM包升级全流程解析

张开发
2026/4/14 12:08:18 15 分钟阅读

分享文章

MySQL 8.0.31到8.0.37小版本升级实战:RPM包升级全流程解析
1. MySQL小版本升级的必要性与风险控制每次看到MySQL发布新版本时很多运维同学都会纠结这个小版本升级到底值不值得做以我管理过上百台MySQL服务器的经验来看8.0.31到8.0.37这种小版本升级往往包含重要的性能优化和bug修复。比如8.0.33修复了可能导致内存泄漏的JSON处理问题8.0.35优化了InnoDB的并发处理能力。但直接在生产环境升级就像给飞行中的飞机换引擎必须做好万全准备。必须做的三件事首先是查看官方Release Notes重点关注Bug Fixes和Changes部分。比如这次8.0.37就修复了GTID复制可能中断的严重问题。其次用测试环境模拟升级流程我习惯用Vagrant快速搭建同构环境。最后一定要备份除了用mysqldump导出数据还要物理备份整个数据目录# 查看当前数据目录位置 grep datadir /etc/my.cnf # 打包整个数据目录 tar zcpf /backup/mysql_data_$(date %F).tgz /var/lib/mysql升级失败时最糟的情况是什么我遇到过插件不兼容导致实例无法启动最终只能回退版本并恢复数据。所以务必确认所有业务依赖的插件在新版本可用特别是企业版插件转社区版的情况。2. RPM升级前的环境准备2.1 系统依赖检查在RHEL/CentOS 7上执行升级时经常被忽略的是系统库依赖。有次升级就因为没装新版libaio导致安装失败。建议先运行# 检查关键依赖 rpm -qa | grep -E libaio|numactl # 安装缺失依赖 yum install -y libaio numactl-libs特别注意如果之前用MySQL Yum Repository安装的需要先清理残留配置。我吃过亏旧仓库的GPG密钥过期会导致安装失败# 清理旧仓库配置 rm -f /etc/yum.repos.d/mysql-community*2.2 下载正确的RPM包MySQL官方镜像站有个坑不同架构的包混在一起。有次给ARM服务器误下x86_64包浪费两小时排查。推荐用这个脚本自动获取合适版本#!/bin/bash VERSION8.0.37 ARCH$(uname -m) [ $ARCH x86_64 ] ARCHx86_64 || ARCHaarch64 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-server-${VERSION}-1.el7.${ARCH}.rpm下载完整组件包时建议用官方打包的bundle约600MB包含所有依赖mysql-8.0.37-1.el7.x86_64.rpm-bundle.tar3. 实战升级步骤详解3.1 安全停止MySQL服务很多人直接用systemctl stop mysqld但生产环境更稳妥的做法是# 先设置只读防止数据写入 mysql -e SET GLOBAL super_read_onlyON; # 优雅停止服务 systemctl stop mysqld --no-block # 确认进程完全退出 while pgrep mysqld; do sleep 1; done遇到过有长事务阻塞导致服务无法停止的情况这时候需要强制终止# 查找所有mysqld进程 ps aux | grep mysqld | grep -v grep | awk {print $2} | xargs kill -93.2 RPM升级核心操作解压bundle包后常见的误区是单独安装某个组件。实际上应该批量升级所有已安装组件# 解压安装包 tar xf mysql-8.0.37-1.el7.x86_64.rpm-bundle.tar # 使用yum批量升级自动处理依赖 yum localinstall mysql-community-{server,client,common,libs}-*.rpm重要技巧如果遇到package already installed错误可能是旧版本残留需要先清理# 查找所有mysql相关包 rpm -qa | grep mysql # 强制移除冲突包 rpm -e --nodeps mysql-community-libs-8.0.31升级过程中最常卡在的地方是配置文件合并。MySQL的升级策略是保留现有/etc/my.cnf新配置文件保存为/etc/my.cnf.rpmnew需要手动对比差异后合并4. 升级后验证与故障处理4.1 基础功能检查启动服务后别急着宣布成功我建议的检查清单# 版本验证 mysql -V # 基础功能测试 mysql -e SELECT version(); SHOW ENGINES; # 检查错误日志 tail -n 100 /var/log/mysqld.log | grep -i error遇到过插件不兼容的情况特别是老的认证插件-- 检查插件状态 SELECT plugin_name, plugin_status FROM information_schema.plugins; -- 如果需要可以降级认证方式 ALTER USER webapp% IDENTIFIED WITH mysql_native_password BY password;4.2 性能回归测试小版本升级有时会引入性能退化。建议用sysbench做快速验证# 创建测试数据库 mysql -e CREATE DATABASE sbtest # 运行基准测试 sysbench oltp_read_write --db-drivermysql --mysql-userroot prepare sysbench oltp_read_write --db-drivermysql --threads8 --time300 run重点关注TPS和Latency指标变化。曾遇到8.0.35升级后写性能下降15%最后发现是新的innodb_flush_neighbors参数导致调整后恢复。5. 回滚方案设计再完善的升级流程也要准备回滚方案。我的三板斧数据回滚如果只是配置问题可以用之前备份的my.cnf覆盖新配置版本回退下载旧版本RPM强制安装需关闭版本校验rpm -Uvh --oldpackage mysql-community-*-8.0.31.rpm完整恢复当数据损坏时用物理备份还原整个数据目录最惊险的一次是升级后主从复制中断最终通过以下步骤恢复-- 从库执行 STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO MASTER_AUTO_POSITION1; START SLAVE;记住能在测试环境踩的坑绝不要带到生产环境。每次升级前用虚拟机做破坏性测试记录所有可能出错的情况和应对方案。

更多文章