一.背景
最近公司通过绿盟扫描了系统的生产环境,发现了MySQL的多个安全漏洞,领导让我去处理这个问题。经过调研之后,总结了两种解决方案,一是去Oracle官网下载漏洞补丁,但是这种方式需要提供购买过Oracle产品的账号才能去下载,而公司这边暂时无法提供账号,所以选择另一种方案:进行数据库升级。
二.注意事项
1.因为公司服务器使用的是二进制安装MySQL,所以这里只介绍这种方式,如果是用rpm方式安装的MySQL,建议使用 rpm -Uvh 的方式进行升级,这里不详细介绍这种方式;
2.此文档只适用于MySQL小版本的升级(如从8.0.x到8.0.y),不适用于跨版本升级(如从5.6.x到8.0.y),不支持从 MySQL 8.0 降级到 MySQL 5.7,或从 MySQL 8.0 版本降级到之前的 MySQL 8.0 版本。唯一支持的替代方法是恢复升级前所做的备份。
3.由于公司的MySQL版本是8.4.0,在选择要升级的版本时,从MySQL官网可以看到,截止2025年1月23日,可选择的小版本有8.4.2和8.4.3,而8.4.2的版本在官方发布的漏洞报告里还有许多漏洞,所以这里选择升级到8.4.3,可根据自己的实际情况选择。
版本
官方漏洞报告
官方升级文档:MySQL :: MySQL 8.4 Reference Manual :: 3 Upgrading MySQL
三.详细步骤:
0.开始之前运行下面这条命令
mysqlcheck -u root -p --all-databases --check-upgrade
如果检查出任何错误需要改正之后再进行升级步骤
1、备份数据:在进行MySQL数据库升级之前,强烈建议备份数据库,以防升级过程中数据丢失。可以使用mysqldump、mydumper或xtraback等备份工具进行数据备份。
这里使用mysqldump:
mysqldump -u root -p --all-databases --single-transaction --quick --lock-tables=false > full-backup.sql
2.查看MySQL版本
select version();
mysql --version
3.查看glibc版本
rpm -qa | grep glibc
4.到MySQL官网下载目标版本
地址:MySQL :: Download MySQL Community Server
注意对应服务器glibc版本
选择第一个进行下载
5.将下载的二进制包上传到服务器:
6.配置MySQL服务器,通过执行以下语句将其配置为执行慢速关机:
mysql> select @@innodb_fast_shutdown;
+------------------------+
| @@innodb_fast_shutdown |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.01 sec)
mysql> SET GLOBAL innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.01 sec)
7.停止 MySQL 服务:
mysqladmin -u root -p shutdown
8.解压下载的二进制安装包,并覆盖原来的安装路径(根据自己实际的安装路径修改):
tar -pxvf mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz
cp -frp mysql-8.4.3-linux-glibc2.28-x86_64/* /usr/local/mysql
9.使用现有的目录启动 MySQL 8.4服务:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
10.登录MySQL查看版本是否升级完成,并检查数据是否完整
至此,MySQL8.4.3升级完成!
总结:
这种升级方式官方称为就地升级,包括关闭旧的MySQL服务器,用新的二进制文件或包替换旧的MySQL二进制文件或软件包,在现有数据目录上重新启动MySQL,以及升级现有安装中需要升级的任何剩余部分。 升级之前一定做好备份,以防数据丢失!!