MySQL低版本经常会出现一些漏洞,有些高危漏洞就得处理,以防未知风险。
一、漏洞描述
MySQL 安全漏洞(CVE-2023-21912)(CVE-2023-21980):
Oracle MySQL 5.7.41 版本及之前版本和 8.0.32 版本及之前版本的 Client programs 组件存在安全漏洞。低权限攻击者利用该漏洞可以通过多种协议访问网络来破坏 MySQL 服务器。
目前厂商已发布升级补丁以修复漏洞,补丁获取链接: https://www.oracle.com/security-alerts/cpuapr2023.html
二、备份MySQL数据
1、为了防止升级过程中出现意外,需要备份数据。根据数据大小,可以选择sql导出,或者dump方式导出。
2、备份my.cnf配置文件
三、漏洞处理方式
通过升级最新版本的方式解决漏洞即可
3.1 下载MySQL
2023年6月16日15:26:54 当前最新版本的MySQL为8.0.33
可以根据服务器的硬件以及系统的不同,在这里https://dev.mysql.com/downloads/mysql/8.0.html查看和下载对应的MySQL版本。
注意:1、选择对应的linux版本,centos7要选择linux7版本哦。不然会有未知错误。比如我是cento7 x86_64架构则下载mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
下载mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
并将其拷贝到服务器上
3.2 查看当前的MySQL版本
可以执行show variables like '%version%'
命令,查看当前mysql版本。如下:
3.3 解压上传服务器的mysql-8.0.33包
tar -xvf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
3.4 关闭正在运行的MySQL服务
先查看运行情况:Active: active (running)
[root@host ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2022-08-09 14:52:41 CST; 10 months 6 days ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 2330 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 2354 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─2354 /usr/sbin/mysqld
8月 09 14:48:45 host systemd[1]: Starting MySQL Server...
8月 09 14:52:41 host systemd[1]: Started MySQL Server.
关闭mysqld
systemctl stop mysqld
再次查看运行情况,确认关闭情况 Active: inactive (dead)
[root@host mysql8.0.33]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead) since 一 2023-06-19 10:16:56 CST; 4s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 2354 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 2330 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 2354 (code=exited, status=0/SUCCESS)
Status: "Server shutdown complete"
8月 09 14:48:45 host systemd[1]: Starting MySQL Server...
8月 09 14:52:41 host systemd[1]: Started MySQL Server.
6月 19 10:16:53 host systemd[1]: Stopping MySQL Server...
6月 19 10:16:56 host systemd[1]: Stopped MySQL Server.
3.5 强制安装新版本包
rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-8.0.33-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-8.0.33-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-8.0.33-1.el7.x86_64.rpm --nodeps --force
3.5.1 安装报错1
[root@host mysql8.0.33]# rpm -ivh mysql-community-common-8.0.33-1.el9.x86_64.rpm --nodeps --force
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-common-8.0.33-1.e################################# [100%]
错误:解压压缩文件 失败:cpio: Bad magic
错误:mysql-community-common-8.0.33-1.el9.x86_64: 安裝 已失败
3.5.2 安装报错2
[root@host mysql8.0.33]# rpm -ivh mysql-community-common-8.0.33-1.el9.x86_64.rpm --nodeps
准备中... ################################# [100%]
file /usr/share/mysql-8.0/bulgarian/errmsg.sys from install of mysql-community-common-8.0.33-1.el9.x86_64 conflicts with file from package mysql-community-common-8.0.30-1.el7.x86_64
file /usr/share/mysql-8.0/czech/errmsg.sys from install of mysql-community-common-8.0.33-1.el9.x86_64 conflicts with file from package mysql-community-common-8.0.30-1.el7.x86_64
file /usr/share/mysql-8.0/danish/errmsg.sys from install of mysql-community-common-8.0.33-1.el9.x86_64 conflicts with file from package mysql-community-common-8.0.30-1.el7.x86_64
……
……
……
3.5.3 安装报错原因与解决
上面的2个错误都是因为我是centos7,结果下载了centos9版本的包导致。应该选择el7才对而不是选择el9,我这边没注意,默认下载了el9的版本。如下:
选择下载新的el7版本的包再次安装,是OK的,如下:
[root@host mysql8.0.33]# rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm --nodeps --force
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-common-8.0.33-1.e################################# [100%]
[root@host mysql8.0.33]# rpm -ivh mysql-community-libs-8.0.33-1.el7.x86_64.rpm --nodeps --force
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-libs-8.0.33-1.el7################################# [100%]
[root@host mysql8.0.33]# rpm -ivh mysql-community-client-8.0.33-1.el7.x86_64.rpm --nodeps --force
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-client-8.0.33-1.e################################# [100%]
[root@host mysql8.0.33]# rpm -ivh mysql-community-server-8.0.33-1.el7.x86_64.rpm --nodeps --force
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-server-8.0.33-1.e################################# [100%]
[root@host mysql8.0.33]#
成功截图:
3.7 查看已经安装的MySQL
rpm -qa |grep mysql
[root@host- ~]# rpm -qa |grep mysql
mysql-community-client-plugins-8.0.29-1.el7.x86_64
mysql-community-common-8.0.30-1.el7.x86_64
mysql-community-common-8.0.33-1.el7.x86_64
mysql-community-icu-data-files-8.0.29-1.el7.x86_64
mysql-community-libs-compat-8.0.29-1.el7.x86_64
mysql-community-libs-8.0.30-1.el7.x86_64
mysql-community-server-8.0.30-1.el7.x86_64
mysql-community-libs-8.0.33-1.el7.x86_64
mysql-community-server-8.0.33-1.el7.x86_64
mysql-community-devel-8.0.29-1.el7.x86_64
mysql-community-client-8.0.30-1.el7.x86_64
mysql-community-client-8.0.33-1.el7.x86_64
将过期的包,也就是上个版本的包移除(貌似不移除也没出现什么问题)
注意:只移除本次安装的4个对应的之前的包哈
以common举例如下:
rpm -e mysql-community-common-8.0.30-1.el7.x86_64
3.7 启动MySQL服务
systemctl start mysqld
查看日志:
# 默认在这里:
tail -f /var/log/mysqld.log
# 如果在my.cnf里指定了,则在对应位置查看即可
如下图,可以看到版本号8.0.33已经启动无ERROR
注意:8.0.33的my.cnf加上如下参数,启动不起来,具体还没研究。
3.8 再次查看升级后的MySQL版本
可以执行show variables like '%version%'
命令,查看升级后的mysql版本。如下,发现已经升级到8.0.33,平滑升级成功。