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.
619 10:16:53 host systemd[1]: Stopping MySQL Server...
619 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,平滑升级成功。
在这里插入图片描述

3.9 通过程序,或者一些标志位查看数据情况是否无误

END

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐