首页 > 数据库 >mysql处理CVE-2023-21912漏洞

mysql处理CVE-2023-21912漏洞

时间:2023-04-26 13:12:50浏览次数:61  
标签:8.0 21912 my mysql 升级 版本 2023 rpm

目录

背景

Mysql出现拒绝服务漏洞(CVE-2023-21912),影响范围:5.0.0<=Oracle MySQL<=5.7.41和8.0<=Oracle MySQL<=8.0.30。线上系统使用的mysql都在此版本内,所以需要处理这个漏洞。

注:本文使用方法不敢完全保证正确,目前升级到发文时间,已过一个多月,没有任何问题。有错误的地方,欢迎指正

解决办法

升级mysql到最新版本(本文升级到的是8.0.33)

系统现状

目前系统部署了好几个生产环境,mysql方式有好几种部署方式(历史遗留问题)

  • 原生部署(压缩包)
  • yum部署
  • docker部署

思考

线上部署的方式不同,但是都是8.0.xx版本,考虑是小版本的升级,可以考虑覆盖应用。(这里没有完全验证猜想,慎用)。

  • docker升级 这个比较简单,直接改镜像版本
  • yum部署、原生部署就是本文的操作流程

升级过程(离线)

目前生产环境是离线环境,此处升级主要是离线升级的处理。

1. 查看 Centos 版本

cat /etc/centos-release

img

2.查看数据库版本

# 连接mysql数据,执行语句
SELECT VERSION()

img

3. 数据库离线下载地址

https://dev.mysql.com/downloads/mysql/
centos 对应 Red Hat Enterprise Linux / Oracle Linux
注:不知道linux对应Mysql版本,可以问ChatGPT
img

4. 解压安装包

在生产环境下加压安装包,在当前目录执行操作

5. 停止mysql服务

注意:如果mysql的配置修改的是/etc/my.cnf,升级之后,这个要覆盖

systemctl stop mysqld

5. 备份数据库文件

有镜像备份,可以忽略

# 注意:保存data文件,这里有两种路线,一种是通过生成sql,另外一种是数据文件保存(类似docker的挂载)
# 我选择第二种,因为感觉小版本是兼容的
# my.conf重新设定路径,那就修改到对应地址
cp -R /var/lib/mysql /var/lib/mysql_backup

6. 卸载当前数据库版本

这一步有点小坑,我通过Chatgpt得到的答案是:yum remove mysql mysql-server
但是实际上,安装的时候有多个包,所以我操作的过程采用的是列举包,依次删除,删除过程中包之间的依赖,我都强制删除。


# 列举以安装版本的mysql
rpm -qa | grep -i mysql
# 删除
yum remove mysql-community-xxx.x86_64

img

原生安装
如果是原生解压包安装的,目前的处理(这个是同事帮忙处理,我没有校验,仅作参考,慎用):

# 注释mysql路径
vim /etc/profile
# 配置生效
source /etc/profile

7. 本地安装

# 按顺序执行安装
# 下面是centos的mysql版本8.0.33版本安装顺序,包的名称自行根据系统版本修改
rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.33-1.el7.x86_64.rpm

8. 启动mysql

# 注:如果/etc/my.conf配置有设定,要先覆盖此文件,因为重新安装mysql之后,/etc/my.cnf会被覆盖
systemctl start mysqld
# 检查状态
systemctl status mysqld
# 查看日志
journalctl -u mysqld

img
img

辅助操作

查看含有mysql文件路径

find / -name mysql

img

查找mysql配置文件

mysql --help | grep /my.cnf | xargs ls
// 配置优先级 /etc/my.cnf > /etc/mysql/my.cnf > $basedir/my.cnf > ~/my.cnf
// 默认配置文件地址 /etc/my.cnf
// 默认日志路径  /var/log/mysqld.log

img

查看文件占用大小 当前目录

du -h --max-depth=1

查看应用日志

 journalctl -u 服务名称

小结

由于不是专业运维,对Linux不是很熟悉,对mysql的版本和运行原理也不精通;所以被要求短时间内升级mysql版本,采取的是尽可能疑问排除,采用最简单、快速的方法。

升级之前,自己没有太大把握,我尽量把自己的疑问整理了一下:

  • mysql版本升级会影响什么?大版本和小版本会不会有区别?
  • 如何备份mysql数据,出错如何快速恢复?
  • 不同版本的linux对应的mysql版本如何确认?
    我是询问ChatGPT,但是没有进一步求证
  • 离线安装会不会遇到系统缺失部分基础包的问题?
    这个在离线安装的docker遇到过,所以特别忌惮
  • 升级完成后,如何判断mysql是正常呢?

下面是自己升级的过程,自己存在很多疑问和不懂之处,虽然目前升级没有问题,但是过程正确比结果正确更重要。

1. 排查线上系统版本和安装的mysql版本

实践中,有多个服务器的mysql升级的,做好表格记录。包括:系统版本、mysql版本、安装方式等。
因为升级过程中,就遇到有一台服务器的Mysql是解压安装的;然而测试环境实践中,没有考虑这个情况,结果临时将全局路径剔除来解决。

2. 确认mysql版本影响

目前处理的是mysql 8.0.29、mysql 8.0.20到mysql 8.0.33的情况,这个没有查找太多资料,完全凭经验判断(错误示范)。

3. 下载安装包

官方地址:https://dev.mysql.com/downloads/mysql/

5. 借助ChatGPT

通过ChatGPT来获取解决方案。ChatGPT给出了一个貌似“正确”的答案。

4. 测试环境实践

将ChatGPT的答案在测试环境数据库进行升级,备份my.cnf配置,操作顺利。准备好脚本,正式环境升级备用。

5. 测试环境运行一段时间

项目开发人员开发一天,没有问题,就着手升级

6. 升级

首要考虑备份,这个集团有运维人员,负责网络虚拟机的运维,提前预定时间,到点备份镜像。在这之前上传好各个服务器的安装包,检查一遍脚本,备份mysql配置。时间点到了,开始按步骤升级。实际操作过程中,还是有出错,就是自己疏忽,没有三台mysql服务器,只校验了其中两台,其他有一台是解压包安装的,等到操作到这台,才发现找到不yum安装包,最后还是旁边同事帮忙一起处理。

最后,这次升级,有多少Linux知识盲区,自己可以去补充,后续等工作放缓一点,再回来重新校验和补充。

参考

标签:8.0,21912,my,mysql,升级,版本,2023,rpm
From: https://www.cnblogs.com/watervon/p/17354635.html

相关文章

  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库
    前言  mysql驱动版本msvc2015x32版本调好,mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享......
  • mysql如何查看和删除用户
    一、mysql如何查看存在多少用户SELECTCOUNT(*)FROMmysql.user;这将返回一个整数值,表示当前系统中存在多少用户。另外,你也可以使用以下命令查看当前系统中的所有用户:SELECTUserFROMmysql.user;这将返回一个包含所有用户名称的列表。如果你想获取更多有关MySQL用......
  • Rocky Linux 9 离线安装 MySQL 8.0
    1、离线安装包下载https://dev.mysql.com/downloads/mysql/5.5.html?os=31&version=5.12、解压并安装#解压tarxfmysql-8.0.33-1.el9.x86_64.rpm-bundle.tar#安装MySQLdnf-ylocalinstallmysql-community-common-8.0.33-1.el9.x86_64.rpmdnf-ylocalinstallmys......
  • SpringBoot2 hikari关于 Failed to validate connection com.mysql.cj.jdbc.Connectio
    项目启动不报错,如果静默15分钟没有数据库操作就报上述错误WARN不影响程序运行Failedtovalidateconnectioncom.mysql.cj.jdbc.ConnectionImpl@16244d67(Nooperationsallowedafterconnectionclosed.).PossiblyconsiderusingashortermaxLifetimevalue.发现Spri......
  • node同步查询数据库(mysql)
    mysql模块默认异步操作,在写一些简单脚本时会比较痛苦,可以通过async/await和Promise封装成同步操作asyncfunctionquery(connection,sql){returnnewPromise((resolve,reject)=>{connection.query(sql,function(error,results){if(error)reject(resu......
  • MySQL主从复制Slave_IO_Running为No
    主要记录解决问题的过程,为以后发现类似问题提供解决方法的参考。首先查看从机的mysql日志文件:tail/var/log/mysqld.log日志从上往下看,可以很快看到在中间位置上有一个ERROR的标志,后面写得很清楚,我的主机UUID和从机UUID重复了,而这两个UUID在这里要求必须要不相等的,所以我上面......
  • helper.js(20230426)
    //***************************************参数辅助对象***************************************///公共参数辅助对象varObjParameter={//获取url参数值//注意:参数值最好不用中文,会有编码问题//name:参数名称getQueryString:function(name){var......
  • 老杜2023最新Vue实战精讲(三)Vue组件化
    动力节点老杜全新版Vue教程笔记分享给大家学习の地止:https://www.bilibili.com/video/BV17h41137i4视频教程从Vue2开始讲解,一步一个案例,知识点由浅入深,然后很自然的过度到Vue3版本。Vue3是目前企业中使用最多的一个版本。视频中会把每一个Vue的知识点讲解的非常通透,不但举例......
  • .NET周报 【4月第4期 2023-04-23】
    国内文章2023成都.NET线下技术沙龙圆满结束https://www.cnblogs.com/edisonchou/p/2023_chengdu_dotnet_club_activity_review.html2023年4月15日周六,由MASA技术团队和成都.NET俱乐部共同主办的2023年成都.NET线下技术沙龙活动在成都市世纪城新会展中心知域空间举行,共计报名人......
  • MySQL数据类型
     DB哥MySQL高级教程-系统学习MySQL共149课时关注微信公众号免费学:【DB哥】文末有MySQL高级课程目录1、MySQL数据类型MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 1.2、mysql中编码和字符在mysql中,一个中文汉字所占的字节数与编码格式有......