当前位置: 首页 > news >正文

centos7中MySQL 5.7.32 到 5.7.44 升级指南:基于官方二进制包的原地替换式升级

目录

  • 前言
  • 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.dtcms.com/a/359234.html

相关文章:

  • 有个需求:切换车队身份实现Fragment的Tab隐藏显示(车队不显示奖赏)
  • SNMPv3开发--简单使用
  • 【Linux基础】深入理解Linux环境下的BIOS机制
  • Python - 机器学习:从 “教电脑认东西” 到 “让机器自己学规律”
  • 项目管理和产品管理的区别
  • docker,mysql安装
  • vector的学习和模拟
  • 揭秘表格推理的“思维革命”:RoT模型介绍
  • 【机器学习基础】机器学习中的容量、欠拟合与过拟合:理论基础与实践指南
  • Vue生命周期、工程化开发和脚手架、组件化开发
  • 学习日志41 python
  • 打工人日报#20250830
  • 内网后渗透攻击--跨域攻击
  • 给某个conda环境安装CUDA 12.4版本 全局CUDA不变
  • Mybatis 动态sql
  • 【树形数据结构】李超线段树 (Li-Chao Tree)
  • 【深度学习新浪潮】有没有什么方法可以将照片变成线描稿,比如日式漫画的那种?
  • 嵌入式学习日记(38)HTTP
  • Ansible主机模式与文件导入技巧
  • 开发环境全面配置指南:语言环境与数据库工具
  • 【面试场景题】订单超时自动取消功能如何设计
  • 【机器学习入门】3.3 FP树算法——高效挖掘频繁项集的“树状神器”
  • 11 C 语言 sizeof 与指针实战指南:一维 / 二维数组计算注意事项 + 笔试真题解析 + sizeof strlen 对比
  • 谈谈线程的中断退出
  • nginx(自写)
  • [Windows] 剪映国际版CapCut 6.7.0 视频编辑处理,免费使用素材和滤镜
  • 倾斜摄影是选择RGB图像还是多光谱影响进行操作?
  • RestTemplate工具类用法总结
  • AI融合高等教育:从通识到专业 - 学科+AI人才培养白皮书(下)
  • 最长递增子序列(LIS)的 DFS 解法详解与实现