目录

  • 前言
  • 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 升级目的

  1. 修复安全漏洞

MySQL 5.7.32 可能存在一些已知的安全漏洞,升级到 5.7.44 可以修复这些漏洞,增强数据库的安全性,防止潜在的攻击。

  1. 提高性能和稳定性

新版本的 MySQL 通常包含了性能优化、bug 修复和一些系统级改进,有助于提升数据库的响应速度和稳定性,尤其是在处理高并发、大数据量时。

  1. 兼容性和功能增强

通过升级,能够享受新版本带来的功能增强,比如更好的 JSON 支持、优化的查询执行计划、提升的备份和恢复功能等。

  1. 解决兼容性问题

升级后,可能修复了与其他软件版本(如操作系统、应用程序等)的兼容性问题,避免由于版本差异导致的故障。

1.3 升级方法概述

本次升级的核心思想是用新版本的二进制包模拟集中式安装,并覆盖分散的旧版本二进制文件,保留原有配置和数据,使用系统原有的服务管理工具进行服务管理。我们将采用以下步骤来实现这一目标:

  • 备份旧数据
  • 解压官方二进制包
  • 替换 MySQL 二进制文件
  • 启动新版本并完成升级

1.4 升级策略与注意事项

策略:我们将解压官方二进制包,并将其主要文件手动覆盖到系统对应的分散目录中(如 /usr/bin, /usr/sbin),同时保留所有旧的配置文件、数据目录和服务管理方式

重要警告

  1. 此操作不可逆:直接用新文件覆盖旧文件,难以直接回滚到旧的RPM安装状态。因此,备份是绝对必要的
  2. 兼容性:5.7.32 -> 5.7.44 是小版本升级,极度平滑,此方法风险很低。
  3. 服务管理:升级后,你仍然使用 systemctl start mysqld 来管理服务,因为我们将保留原有的 systemd 服务单元文件。

2. 升级准备

2.1 备份工作

在进行任何升级之前,备份是不可忽视的关键步骤。备份工作不仅仅是为了防止数据丢失,也是为了确保升级过程中万一出现问题时可以进行恢复。

  1. 逻辑备份(最重要的备份):使用 mysqldump 工具备份所有数据库及相关设置。

    mysqldump -u root -p --port=2020 --all-databases --events --routines --triggers --master-data=2 > /opt/full_backup_before_upgrade.sql
    
  2. 物理备份(包括数据目录和配置文件):

    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/
    
  3. 备份旧的二进制文件(关键!用于回滚):

    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 || :
    
  4. 重新启动 MySQL 服务

    systemctl start mysqld
    

2.2 下载目标版本

  1. 下载官方二进制包:你可以从 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 的二进制文件,以下是一些重要的文件:

  1. 替换 mysqld 守护进程

    cp -p ./bin/mysqld /usr/sbin/mysqld.new
    mv /usr/sbin/mysqld.new /usr/sbin/mysqld
    chmod 755 /usr/sbin/mysqld
    
  2. 替换 mysql 客户端

    cp -p ./bin/mysql /usr/bin/mysql.new
    mv /usr/bin/mysql.new /usr/bin/mysql
    
  3. 替换 mysqldump 工具

    cp -p ./bin/mysqldump /usr/bin/mysqldump.new
    mv /usr/bin/mysqldump.new /usr/bin/mysqldump
    
  4. 替换 mysql_upgrade 工具

    cp -p ./bin/mysql_upgrade /usr/bin/mysql_upgrade.new
    mv /usr/bin/mysql_upgrade.new /usr/bin/mysql_upgrade
    
  5. 替换其他工具:你可以根据需要替换其他工具,如 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升级到官方二进制包,流程如下:

  1. 备份:逻辑备份 + 物理备份 + 二进制文件备份
  2. 停服务systemctl stop mysqld
  3. 换文件:用新版本二进制包中的文件,逐个替换系统目录 (/usr/sbin/, /usr/bin/) 中的旧文件。
  4. 再启动:启动服务完成自动数据字典升级。
  5. 跑工具必须执行 mysql_upgrade
  6. 再重启:使更改生效。
  7. 做验证

这种方法既享受了官方最新二进制包的好处,又保留了原有系统的配置和服务管理方式,是此类升级场景下的最优解。

7. 总结

本文详细介绍了通过官方二进制包将 MySQL 5.7.32 升级到 5.7.44 的操作步骤,涵盖了备份、替换二进制文件、执行升级和回滚方案等内容。通过这种“替换式”升级方法,我们能够在保留原有配置和数据的同时,顺利完成 MySQL 的版本升级。在进行升级时,请务必遵循每个步骤,确保备份工作完善,以便在出现问题时能够及时恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95099.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95099.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95099.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学七夕花礼(MATLAB版)

前言参考的视频在抖音,电脑版的抖音一直登录不了,用手机分享的链接如下所示。4.35 Iv.FH yTl:/ 04/04 复制打开抖音👀数学送的七夕花礼,记得查收噢.# 七夕花礼请查收 ... https://v.douyin.com/H-YpOJCyQyg/rho4sin(8theta)公式&a…

LeetCode - 21. 合并两个有序链表

题目 21. 合并两个有序链表 思路 我会采用双指针的方法,同时遍历两个链表,比较当前节点的值,将较小的节点添加到结果链表中。 具体思路是这样的: 首先创建一个哑节点(dummy node)作为合并后链表的头部,这样可以简…

ES01-环境安装

ES01-环境安装 文章目录ES01-环境安装1-参考网址2-知识总结1-参考网址 elasticsearch官网地址:https://www.elastic.co/安装elasticsearch9.0.0参考:https://zhuanlan.zhihu.com/p/1920780524991017021安装elasticsearch9.0.0参考:http://ww…

UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?数…

学习python第15天

其实前面学的根本不记得了,小丑.jpg,如果真的面试问到了估计也是一脸懵今日任务:JSON先认识一下JSON和JSONL文件记得之前在面试KIMI的时候,面试官就给我出了JSONL和EXCEL转换的手撕代码题,而那个时候,我连什…

Spring框架集成Kakfa的方式

Spring框架集成Kakfa的方式 springboot集成kafka的方式 添加maven依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version> </dependency&g…

【蓝桥杯 2024 省 Python B】缴纳过路费

【蓝桥杯 2024 省 Python B】缴纳过路费 蓝桥杯专栏&#xff1a;2024 省 Python B 算法竞赛&#xff1a;图论&#xff0c;生成树&#xff0c;并查集&#xff0c;组合计数&#xff0c;kruskal 最小生成树&#xff0c;乘法原理 题目链接&#xff1a;洛谷 【蓝桥杯 2024 省 Python…

个性化导航新体验:cpolar让Dashy支持语音控制

文章目录简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问用 cpolar 让 Dashy 管理个人导航站就是这么简单&#xff01;三步轻松搞定&#xff1a;在电脑上安装 Dashy&#xff0c;拖拽添加常用网站&#xff0c;运行 cpolar 生成远程访问链接。这个方法不仅免费&…

SQL学习记录

基本的&#xff0c;增、删&#xff0c;改insert into table_name (列1, 列2,...) VALUES (值1, 值2,....)Delete from 表 where keyvalueupdate 表 set keyvalue,keyvalue where keyvalue查用的最多whereSELECT prod_name, prod_price FROM Products WHERE vend idDLLO1OR ve…

零基础学C++,函数篇~

C基础学习&#xff08;DAY_06&#xff09;函数1. 函数的定义与使用2. 函数参数传递3. 变量的声明周期4. 函数的其他特性5. 函数的嵌套与递归函数 1. 函数的定义与使用 ​ 在设计程序时&#xff0c;如果一段代码重复进行某种操作或者完成一个特定的功能&#xff0c;就应该将这…

react+vite+ts 组件模板

1.创建项目npm create vitelatest my-app --template react-ts2.配置项目 tsconfig.json{"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"lib": ["ES2020", "DOM", "D…

C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region

C语言中的输出参数详解&#xff1a;以 alloc_chrdev_region 为例 在学习 C 语言函数调用时&#xff0c;我们常常接触到“输入参数”&#xff0c;比如把一个数字传给函数&#xff0c;让函数帮我们算出结果。但有时候可能会发现&#xff0c;有些函数除了返回值之外&#xff0c;还…

机器视觉学习-day09-图像矫正

1 仿射变换与透视变换1.1 仿射变换之前在图像旋转实验中已经接触过仿射变换&#xff0c;仿射变换是一个二维坐标系到另一个二维坐标系的过程&#xff0c;在仿射变换中符合直线的平直性和平行性。1.2 透视变换透视变换是把一个图像投影到一个新的视平面的过程。在现实世界中&…

杰理ac791获取之前版本sdk

很惭愧&#xff0c;一个如此简单的问题卡了这么久&#xff0c;运动战的本质就是多找线索&#xff0c;多尝试

基于轴重转移补偿和多轴协调的粘着控制方法研究

基于轴重转移补偿和多轴协调的粘着控制方法研究 1. 论文标题 基于轴重转移补偿和多轴协调的粘着控制方法研究 2. 内容概括 该论文针对重载电力机车在复杂轨面条件下易发生空转的问题,提出了一种新型粘着控制方法。传统方法仅考虑单轴粘着利用而忽略轴间关系,本文设计了包…

台达 PLC 软件导入 EDS 文件后不能通过 PDO 控制的解决方法

一、功能及注意事项 1.功能说明&#xff1a;通过修改 EDS 文件处理台达 PLC 软件导入 EDS 文件后不能通过 PDO 控制的解决方法 2.注意事项&#xff1a;1).此文档只针对立迈胜 CANopen 通讯一体化电机&#xff1b; 2).EDS 文件可以用记事本打开&#xff1b; 二、EDS 文件修改 IS…

Python库2——Matplotlib2

上一篇文章主要介绍了Matplotlib库中的Pyplot模块中几大常见图像的绘制&#xff0c;包括自行修改图像的属性&#xff0c;在绘制图像时会自动创建一个图形窗口来展现这些图像。本节内容继续讲讲这个&#xff08;Figure&#xff09;图像窗口即其一些常见用法。 其他python库链接…

AI生成思维导图和AI生成Excel公式

AI生成思维导图和AI生成Excel公式 AI 生成思维导图和 AI 生成 Excel 公式是一个完全免费的 AI 办公合集网站。 它完全免费&#xff0c;一个网站支持多个实用 AI 办公功能&#xff0c;包括&#xff1a;免费 AI Excel 公式生成器、输入 Excel 公式解释含义、AI Excel 助手、Exc…

java中的VO、DAO、BO、PO、DO、DTO

VO、DAO、BO 等对象在了解这里 po、vo、dao、之前先介绍下 MVC 开发模式M层负责与数据库打交道&#xff1b;C层负责业务逻辑的编写&#xff1b;V层负责给用户展示&#xff08;针对于前后端不分离的项目&#xff0c;不分离项目那种编写模版的方式&#xff0c;理解V的概念更直观&…

More Effective C++ 条款16:牢记80-20准则(Remember the 80-20 Rule)

More Effective C 条款16&#xff1a;牢记80-20准则&#xff08;Remember the 80-20 Rule&#xff09;核心思想&#xff1a;软件性能优化遵循帕累托原则&#xff08;Pareto Principle&#xff09;&#xff0c;即大约80%的性能提升来自于优化20%的关键代码。识别并专注于这些关键…