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

目录

  • 前言
  • [1. 升级概述](#1. 升级概述)
    • [1.1 升级背景](#1.1 升级背景)
    • [1.2 升级目的](#1.2 升级目的)
    • [1.3 升级方法概述](#1.3 升级方法概述)
    • [1.4 升级策略与注意事项](#1.4 升级策略与注意事项)
  • [2. 升级准备](#2. 升级准备)
    • [2.1 备份工作](#2.1 备份工作)
    • [2.2 下载目标版本](#2.2 下载目标版本)
    • [2.3 停止 MySQL 服务](#2.3 停止 MySQL 服务)
  • [3. 替换二进制文件](#3. 替换二进制文件)
    • [3.1 解压官方二进制包](#3.1 解压官方二进制包)
    • [3.2 替换核心二进制文件](#3.2 替换核心二进制文件)
    • [3.3 更新共享库](#3.3 更新共享库)
  • [4. 执行升级并验证](#4. 执行升级并验证)
    • [4.1 启动 MySQL 服务](#4.1 启动 MySQL 服务)
    • [4.2 监控错误日志](#4.2 监控错误日志)
    • [4.3 执行 `mysql_upgrade`](#4.3 执行 mysql_upgrade)
    • [4.4 重启 MySQL 服务](#4.4 重启 MySQL 服务)
    • [4.5 验证升级](#4.5 验证升级)
  • [5. 回滚方案](#5. 回滚方案)
    • [5.1 停止服务](#5.1 停止服务)
    • [5.2 恢复旧的二进制文件](#5.2 恢复旧的二进制文件)
    • [5.3 启动旧版本服务](#5.3 启动旧版本服务)
    • [5.4 终极恢复](#5.4 终极恢复)
  • [6. 升级过程总结](#6. 升级过程总结)
  • [7. 总结](#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 工具备份所有数据库及相关设置。

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

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

    bash 复制代码
    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 服务

    bash 复制代码
    systemctl start mysqld

2.2 下载目标版本

  1. 下载官方二进制包 :你可以从 MySQL 官网https://downloads.mysql.com/archives/community/

    下载适合你操作系统的版本,这里我们以 5.7.44 为例。上传并放到 /opt/ 目录中。

    bash 复制代码
    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 服务:

bash 复制代码
systemctl stop mysqld

3. 替换二进制文件

3.1 解压官方二进制包

在替换文件之前,首先解压下载的官方二进制包:

bash 复制代码
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 守护进程

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

    bash 复制代码
    cp -p ./bin/mysql /usr/bin/mysql.new
    mv /usr/bin/mysql.new /usr/bin/mysql
  3. 替换 mysqldump 工具

    bash 复制代码
    cp -p ./bin/mysqldump /usr/bin/mysqldump.new
    mv /usr/bin/mysqldump.new /usr/bin/mysqldump
  4. 替换 mysql_upgrade 工具

    bash 复制代码
    cp -p ./bin/mysql_upgrade /usr/bin/mysql_upgrade.new
    mv /usr/bin/mysql_upgrade.new /usr/bin/mysql_upgrade
  5. 替换其他工具 :你可以根据需要替换其他工具,如 mysqlcheck, mysqladmin 等。

    bash 复制代码
    cp -p ./bin/mysqlcheck /usr/bin/mysqlcheck.new
    mv /usr/bin/mysqlcheck.new /usr/bin/mysqlcheck

3.3 更新共享库

在某些情况下,你可能需要更新 MySQL 使用的共享库。你可以将新的库文件复制到系统目录,确保 mysqld 可以找到它们。

bash 复制代码
cp -p ./lib/* /usr/lib64/mysql/ || :
cp -p ./lib/* /usr/lib64/

4. 执行升级并验证

4.1 启动 MySQL 服务

启动 MySQL 服务,触发新版本的 mysqld 自动检测并升级数据字典:

bash 复制代码
systemctl start mysqld

4.2 监控错误日志

使用以下命令查看 MySQL 启动日志,确认新版本是否成功启动:

bash 复制代码
tail -f /var/log/mysqld.log

当看到类似 MySQL 5.7.44 的版本信息时,表示升级成功。

4.3 执行 mysql_upgrade

MySQL 5.7 版本要求执行 mysql_upgrade 来升级系统表结构:

bash 复制代码
mysql_upgrade -u root -p --port=2020

当最后显示 OK 时,表示 mysql_upgrade 执行成功。

4.4 重启 MySQL 服务

重启 MySQL 服务,使 mysql_upgrade 的更改生效:

bash 复制代码
systemctl restart mysqld

4.5 验证升级

通过以下命令验证 MySQL 版本和数据库状态:

bash 复制代码
mysql -u root -p --port=2020 -e "SELECT VERSION();"
mysql -u root -p --port=2020 -e "SHOW DATABASES;"

5. 回滚方案

如果升级过程中出现问题,我们可以通过回滚操作恢复到旧版本。

5.1 停止服务

首先停止 MySQL 服务:

bash 复制代码
systemctl stop mysqld

5.2 恢复旧的二进制文件

从备份中恢复旧版本的二进制文件:

bash 复制代码
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 版本:

bash 复制代码
systemctl start mysqld

5.4 终极恢复

如果二进制回滚后仍无法启动,可以使用物理备份恢复数据:

bash 复制代码
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 的版本升级。在进行升级时,请务必遵循每个步骤,确保备份工作完善,以便在出现问题时能够及时恢复。

相关推荐
2301_8035545221 小时前
mysql(自写)
数据库·mysql
叁沐21 小时前
MySQL 30 用动态的观点看加锁
mysql
麦麦大数据1 天前
vue+Django 双推荐算法旅游大数据可视化系统Echarts mysql数据库 带爬虫
数据库·vue.js·django·可视化·推荐算法·百度地图·旅游景点
成都极云科技1 天前
裸金属服务器与虚拟机、物理机的核心差异是什么?
运维·服务器·数据库
学习中的程序媛~1 天前
图数据库neo4j的安装
数据库·neo4j
喂完待续1 天前
【Big Data】AI赋能的ClickHouse 2.0:从JIT编译到LLM查询优化,下一代OLAP引擎进化路径
大数据·数据库·clickhouse·数据分析·olap·big data·序列晋升
柏油1 天前
MySQL InnoDB 架构
数据库·后端·mysql
10km1 天前
jsqlparser(六):TablesNamesFinder 深度解析与 SQL 格式化实现
java·数据库·sql·jsqlparser
微三云、小叶1 天前
“我店模式“当下观察:三方逻辑未变,三大升级重构竞争力
大数据·数据库
JavaArchJourney1 天前
MySQL 索引:原理篇
java·后端·mysql