MySQL作为最流行的开源关系型数据库之一,广泛应用于各类业务系统中。当官方发布新的稳定版本,修复了重要安全漏洞,或者现有版本出现性能瓶颈时,及时升级MySQL就显得非常必要。相比源码编译安装,直接下载官方RPM包进行升级操作更简单、速度更快,也更容易回退。本文将围绕如何使用RPM包完成MySQL的升级展开,涵盖升级前的准备、下载安装、升级后的检查与常见问题处理。
升级前的准备工作
升级数据库是高风险操作,任何疏忽都可能导致数据无法访问。因此在动手之前,务必完成以下几项准备。第一,确认当前MySQL版本和目标版本,登录MySQL执行SELECT VERSION();查看当前版本,再决定要升级到哪个版本。MySQL官方建议逐个大版本升级,例如从5.7升级到8.0,不要直接跨越多个大版本。
第二,全面备份数据。这是最重要的一步,可以使用mysqldump进行逻辑备份,也可以直接复制数据目录做物理备份。逻辑备份的命令如下:
mysqldump -u root -p --all-databases --routines --triggers --events > /backup/all_data_$(date +%F).sql
第三,检查系统依赖。MySQL 8.0的RPM包依赖libaio和ncurses-compat-libs等库,MySQL 8.0.28之后还要求glibc版本不低于2.17。可以先用rpm -qa | grep mysql查看已安装的包,用ldd --version确认glibc版本,避免安装到一半才发现依赖缺失。
第四,查看官方升级文档中的兼容性变更,例如MySQL 8.0默认字符集改为utf8mb4,部分废弃参数(如query_cache_type)在新版本中已被移除,如果配置文件my.cnf中还保留这些参数,会导致MySQL启动失败。
下载并安装MySQL的RPM包
推荐从MySQL官方的下载页面获取RPM包。进入官方下载站后,选择对应的版本和操作系统平台,下载mysql-community-server、mysql-community-client、mysql-community-common、mysql-community-libs等核心包。如果服务器无法联网,可以在本地电脑下载后通过scp或ftp上传到服务器。
下载完成后,建议先校验文件的MD5或SHA256值,确认包没有被篡改:
md5sum mysql-community-server-8.0.36-1.el7.x86_64.rpm # 与官网公布的MD5值比对,一致说明文件完整
安装时有两种常用方式。第一种是使用rpm -Uvh命令直接升级,-U参数会先卸载旧包再安装新包,配置文件会被妥善处理:
rpm -Uvh mysql-community-*.rpm
第二种方式是使用yum localinstall,它的优势在于能自动解决依赖关系,如果缺少libaio等库会自动从软件源下载安装:
yum localinstall mysql-community-*.rpm -y
如果系统中同时存在MariaDB的包,安装MySQL的libs时可能产生文件冲突,需要先卸载mariadb-libs:
rpm -e --nodeps mariadb-libs yum localinstall mysql-community-*.rpm -y
升级后的验证与常见问题处理
安装完成后,重启MySQL服务并观察启动日志:
systemctl restart mysqld systemctl status mysqld tail -100 /var/log/mysqld.log
登录MySQL再次执行SELECT VERSION();确认版本已经更新。需要注意的是,MySQL 8.0.16之前的版本在升级后必须手动执行mysql_upgrade来升级系统表结构和数据字典;而8.0.16及以后的版本,服务端会在启动时自动完成升级检查,不再需要手动执行,如果强行执行反而会提示该命令已被移除。
常见的报错有几种情况。如果启动时报错与数据目录相关,例如提示表结构不兼容,多半是跨大版本升级时数据字典版本差异导致,此时要检查是否遵循了逐版本升级的路径。如果报错提示配置文件中有未知变量,用grep在my.cnf中定位被移除的参数并注释掉即可。如果权限报错,检查SELinux状态,临时执行setenforce 0测试,确认是SELinux策略问题后再调整安全上下文。
最后不要忘记验证业务。创建测试表、执行典型的增删改查语句、检查主从复制状态(如果有的话),确认一切正常后再对外恢复服务。旧版本的备份文件和下载的RPM包建议保留一段时间,以便在新版本出现意外问题时可以快速回退。
原地升级与备份恢复升级的对比
使用RPM包升级本质上属于原地升级,也就是不迁移数据目录,直接替换二进制文件后启动。这种方式的优点是速度快、停机时间短,适合数据量较大的场景;缺点是回退相对麻烦,升级过程中如果数据字典被改写,直接降级回旧版本是不支持的,只能借助备份恢复。
另一种思路是逻辑备份恢复升级:先在新服务器上安装新版本MySQL,再用mysqldump导出的SQL文件导入。这种方式更稳妥,可以充分测试后再切流量,适合生产环境的核心数据库。但它耗时较长,TB级别的库全量导出导入可能需要数小时甚至更久。
实际操作中可以结合两者优势:在低峰期用RPM包原地升级,同时在另一台机器上准备好逻辑备份作为兜底。无论采用哪种方式,事前备份、逐版本升级、升级后验证这三个原则都不能省略。只要按照规范的流程执行,使用RPM包升级MySQL完全可以做到平滑、安全、可控。