centos7中MySQL 5.7.32 到 5.7.44 升级指南:基于官方二进制包的原地替换式升级
目录
- 前言
- 1. 升级概述
- 1.1 升级背景
- 1.2 升级目的
- 1.3 升级方法概述
- 1.4 升级策略与注意事项
- 2. 升级准备
- 2.1 备份工作
- 2.2 下载目标版本
- 2.3 停止 MySQL 服务
- 3. 替换二进制文件
- 3.1 解压官方二进制包
- 3.2 替换核心二进制文件
- 3.3 更新共享库
- 4. 执行升级并验证
- 4.1 启动 MySQL 服务
- 4.2 监控错误日志
- 4.3 执行 `mysql_upgrade`
- 4.4 重启 MySQL 服务
- 4.5 验证升级
- 5. 回滚方案
- 5.1 停止服务
- 5.2 恢复旧的二进制文件
- 5.3 启动旧版本服务
- 5.4 终极恢复
- 6. 升级过程总结
- 7. 总结
前言
在日常的数据库运维工作中,MySQL 是我们最常接触的数据库之一。随着业务的不断发展和对性能的要求越来越高,及时升级 MySQL 到最新版本是非常必要的。通常,很多开发和运维人员都习惯通过包管理工具(如 YUM/DNF)安装 MySQL,这样虽然方便,但也带来了版本更新时二进制文件分散的问题。
本篇文章将讲解如何使用官方的 MySQL 二进制包进行版本升级,特别是针对通过 YUM/DNF 安装的 MySQL 5.7.32 升级到 5.7.44 的场景。本文提供了详细的操作步骤、注意事项以及回滚方案,帮助你顺利完成 MySQL 的升级。
1. 升级概述
1.1 升级背景
对于通过YUM/DNF安装的MySQL,其特点是:
- 没有单一的“安装目录”。二进制文件、库文件、配置文件等被分散安装到系统的标准目录中。
mysqld
二进制文件通常在/usr/sbin/mysqld
。- 配置文件在
/etc/my.cnf
和/etc/my.cnf.d/
。 - 数据文件在
/var/lib/mysql
。 - 错误日志在
/var/log/mysqld.log
。
通过 YUM/DNF 安装的 MySQL 版本会将 MySQL 的文件分散到多个系统目录中,包括二进制文件、库文件、配置文件和日志文件等。随着 MySQL 版本的不断发展,可能会出现某些功能和性能优化上的问题,导致用户需要手动升级到新版本。在此场景下,我们采用“原地替换”的方式,将旧版本的二进制文件替换为官方二进制包中的新版本。
1.2 升级目的
- 修复安全漏洞
MySQL 5.7.32 可能存在一些已知的安全漏洞,升级到 5.7.44 可以修复这些漏洞,增强数据库的安全性,防止潜在的攻击。
- 提高性能和稳定性
新版本的 MySQL 通常包含了性能优化、bug 修复和一些系统级改进,有助于提升数据库的响应速度和稳定性,尤其是在处理高并发、大数据量时。
- 兼容性和功能增强
通过升级,能够享受新版本带来的功能增强,比如更好的 JSON 支持、优化的查询执行计划、提升的备份和恢复功能等。
- 解决兼容性问题
升级后,可能修复了与其他软件版本(如操作系统、应用程序等)的兼容性问题,避免由于版本差异导致的故障。
1.3 升级方法概述
本次升级的核心思想是用新版本的二进制包模拟集中式安装,并覆盖分散的旧版本二进制文件,保留原有配置和数据,使用系统原有的服务管理工具进行服务管理。我们将采用以下步骤来实现这一目标:
- 备份旧数据
- 解压官方二进制包
- 替换 MySQL 二进制文件
- 启动新版本并完成升级
1.4 升级策略与注意事项
策略:我们将解压官方二进制包,并将其主要文件手动覆盖到系统对应的分散目录中(如 /usr/bin
, /usr/sbin
),同时保留所有旧的配置文件、数据目录和服务管理方式。
重要警告:
- 此操作不可逆:直接用新文件覆盖旧文件,难以直接回滚到旧的RPM安装状态。因此,备份是绝对必要的。
- 兼容性:5.7.32 -> 5.7.44 是小版本升级,极度平滑,此方法风险很低。
- 服务管理:升级后,你仍然使用
systemctl start mysqld
来管理服务,因为我们将保留原有的systemd
服务单元文件。
2. 升级准备
2.1 备份工作
在进行任何升级之前,备份是不可忽视的关键步骤。备份工作不仅仅是为了防止数据丢失,也是为了确保升级过程中万一出现问题时可以进行恢复。
-
逻辑备份(最重要的备份):使用
mysqldump
工具备份所有数据库及相关设置。mysqldump -u root -p --port=2020 --all-databases --events --routines --triggers --master-data=2 > /opt/full_backup_before_upgrade.sql
-
物理备份(包括数据目录和配置文件):
systemctl stop mysqld tar -czvf /opt/mysql_data_backup.tar.gz /var/lib/mysql/ tar -czvf /opt/mysql_config_backup.tar.gz /etc/my.cnf /etc/my.cnf.d/
-
备份旧的二进制文件(关键!用于回滚):
mkdir /opt/mysql_old_bin_backup cp -p /usr/bin/mysql /usr/bin/mysqldump /usr/sbin/mysqld /opt/mysql_old_bin_backup/ 2>/dev/null || :
-
重新启动 MySQL 服务:
systemctl start mysqld
2.2 下载目标版本
-
下载官方二进制包:你可以从 MySQL 官网https://downloads.mysql.com/archives/community/
下载适合你操作系统的版本,这里我们以 5.7.44 为例。上传并放到/opt/
目录中。
cd /opt wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
2.3 停止 MySQL 服务
为了替换二进制文件,我们需要停止 MySQL 服务:
systemctl stop mysqld
3. 替换二进制文件
3.1 解压官方二进制包
在替换文件之前,首先解压下载的官方二进制包:
tar -xzf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
cd mysql-5.7.44-linux-glibc2.12-x86_64
3.2 替换核心二进制文件
核心步骤是用新版本的二进制文件覆盖系统中对应的旧版本文件。这里我们将逐个替换 MySQL 的二进制文件,以下是一些重要的文件:
-
替换
mysqld
守护进程:cp -p ./bin/mysqld /usr/sbin/mysqld.new mv /usr/sbin/mysqld.new /usr/sbin/mysqld chmod 755 /usr/sbin/mysqld
-
替换
mysql
客户端:cp -p ./bin/mysql /usr/bin/mysql.new mv /usr/bin/mysql.new /usr/bin/mysql
-
替换
mysqldump
工具:cp -p ./bin/mysqldump /usr/bin/mysqldump.new mv /usr/bin/mysqldump.new /usr/bin/mysqldump
-
替换
mysql_upgrade
工具:cp -p ./bin/mysql_upgrade /usr/bin/mysql_upgrade.new mv /usr/bin/mysql_upgrade.new /usr/bin/mysql_upgrade
-
替换其他工具:你可以根据需要替换其他工具,如
mysqlcheck
,mysqladmin
等。cp -p ./bin/mysqlcheck /usr/bin/mysqlcheck.new mv /usr/bin/mysqlcheck.new /usr/bin/mysqlcheck
3.3 更新共享库
在某些情况下,你可能需要更新 MySQL 使用的共享库。你可以将新的库文件复制到系统目录,确保 mysqld
可以找到它们。
cp -p ./lib/* /usr/lib64/mysql/ || :
cp -p ./lib/* /usr/lib64/
4. 执行升级并验证
4.1 启动 MySQL 服务
启动 MySQL 服务,触发新版本的 mysqld
自动检测并升级数据字典:
systemctl start mysqld
4.2 监控错误日志
使用以下命令查看 MySQL 启动日志,确认新版本是否成功启动:
tail -f /var/log/mysqld.log
当看到类似 MySQL 5.7.44
的版本信息时,表示升级成功。
4.3 执行 mysql_upgrade
MySQL 5.7 版本要求执行 mysql_upgrade
来升级系统表结构:
mysql_upgrade -u root -p --port=2020
当最后显示 OK
时,表示 mysql_upgrade
执行成功。
4.4 重启 MySQL 服务
重启 MySQL 服务,使 mysql_upgrade
的更改生效:
systemctl restart mysqld
4.5 验证升级
通过以下命令验证 MySQL 版本和数据库状态:
mysql -u root -p --port=2020 -e "SELECT VERSION();"
mysql -u root -p --port=2020 -e "SHOW DATABASES;"
5. 回滚方案
如果升级过程中出现问题,我们可以通过回滚操作恢复到旧版本。
5.1 停止服务
首先停止 MySQL 服务:
systemctl stop mysqld
5.2 恢复旧的二进制文件
从备份中恢复旧版本的二进制文件:
cp -p /opt/mysql_old_bin_backup/mysqld /usr/sbin/
cp -p /opt/mysql_old_bin_backup/mysql /usr/bin/
cp -p /opt/mysql_old_bin_backup/mysqldump /usr/bin/
5.3 启动旧版本服务
恢复后,可以启动原来的 5.7.32 版本:
systemctl start mysqld
5.4 终极恢复
如果二进制回滚后仍无法启动,可以使用物理备份恢复数据:
systemctl stop mysqld
rm -rf /var/lib/mysql/*
tar -xzf /opt/mysql_data_backup.tar.gz -C /
systemctl start mysqld
6. 升级过程总结
对于分散安装的MySQL升级到官方二进制包,流程如下:
- 备份:逻辑备份 + 物理备份 + 二进制文件备份。
- 停服务:
systemctl stop mysqld
。 - 换文件:用新版本二进制包中的文件,逐个替换系统目录 (
/usr/sbin/
,/usr/bin/
) 中的旧文件。 - 再启动:启动服务完成自动数据字典升级。
- 跑工具:必须执行
mysql_upgrade
。 - 再重启:使更改生效。
- 做验证。
这种方法既享受了官方最新二进制包的好处,又保留了原有系统的配置和服务管理方式,是此类升级场景下的最优解。
7. 总结
本文详细介绍了通过官方二进制包将 MySQL 5.7.32 升级到 5.7.44 的操作步骤,涵盖了备份、替换二进制文件、执行升级和回滚方案等内容。通过这种“替换式”升级方法,我们能够在保留原有配置和数据的同时,顺利完成 MySQL 的版本升级。在进行升级时,请务必遵循每个步骤,确保备份工作完善,以便在出现问题时能够及时恢复。