欢迎光临
我们一直在努力

MySQL8.0.30升级8.0.46完整操作手册(含回滚方案)

一、前言

本次将MySQL8.0.30版本升级至8.0.46官方稳定版,核心目的是修复旧版本已知漏洞、优化数据库性能、提升系统稳定性与安全性,适配业务长期稳定运行需求。本次升级采用前置不停机准备+短停机窗口升级的平滑升级方案,前期准备工作无需停机,核心程序切换、数据迁移阶段必须停机。升级核心改造为程序与数据目录分离,彻底解决旧版软链接路径依赖问题。操作全程需保留旧版本程序目录用于应急回滚,升级前必须完成全量数据、数据目录备份、配置文件备份,严格按停机窗口规范执行操作,所有校验全部通过后方可恢复业务流量,杜绝数据丢失与业务异常风险。

二、前置准备(业务正常运行,无需停机)

本阶段为升级前置筹备工作,全程无需停机、不影响线上业务,主要完成依赖安装、新版程序下载部署、全量数据及配置备份,预留完整旧版本环境用于后续应急回滚。核心数据迁移、程序切换等高危操作统一在停机窗口执行

1、安装依赖组件

# 执行命令安装MySQL运行所需依赖,已安装可直接跳过
yum install libaio -y

2、下载MySQL8.0.46官方安装包

# 创建工具目录,下载适配系统的官方安装包,并校验文件完整性
mkdir -p /opt && cd /opt
# 官方归档下载安装包
wget –no-check-certificate -c https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.46-linux-glibc2.17-x86_64.tar.xz
# 校验安装包是否完整下载
ls -lh mysql-8.0.46-linux-glibc2.17-x86_64.tar.xz

3、解压部署新版程序

部署完成后,服务器共存新旧两个程序目录:mysql-8.0.30-el7-x86_64(旧版,用于回滚)、mysql-8.0.46(新版,待升级)

# 将安装包解压至指定目录,标准化目录名称,配置运行用户权限,实现新旧程序目录共存,旧目录禁止删除
# 解压程序至/data目录
tar -Jxvf mysql-8.0.46-linux-glibc2.17-x86_64.tar.xz -C /home
# 重命名目录
mv /home/mysql-8.0.46-linux-glibc2.17-x86_64 /home/mysql-8.0.46
# 授权运行用户权限
chown -R mysql:mysql /home/mysql-8.0.46

4、全库逻辑备份

/home/mysql/bin/mysqldump \\
–single-transaction \\
–source-data=2 \\
–set-gtid-purged=OFF \\
–routines \\
–triggers \\
–events \\
–hex-blob \\
–quick \\
–column-statistics=0 \\
–default-character-set=utf8mb4 \\
–max-allowed-packet=1G \\
–databases orange \\
-h192.168.11.133 \\
-P3306 \\
-umysql -p \\
2>/data/db_bak/mysql8030_dump_$(date +%F).err \\
> /data/db_bak/mysql8030_full_$(date +%Y%m%d).sql

5、备份配置及启停脚本

可选,有的话就不用备份

cp /home/mysql/my.cnf /data/my.cnf.bak.$(date +%Y%m%d)
cp /home/mysql/startMysql.sh /data/startMysql.sh.bak
cp /home/mysql/stopMysql.sh /data/stopMysql.sh.bak

6、创建独立数据、binlog日志目录

mkdir -pv /home/mysql_data
chown -R mysql.mysql /home/mysql_data
mkdir -p /home/mysql_binlog
chown -R mysql:mysql /home/mysql_binlog

三、停机窗口升级操作

本阶段需短暂停止数据库服务,完成数据目录迁移、软链接切换、配置文件修改,实现程序与数据分离改造

1、停止MySQL服务并清理残留进程

注意:进入停机窗口后,优先关停所有连接该MySQL实例的业务服务、应用程序、定时任务,彻底断开数据库读写连接,避免存在活跃事务、长连接导致数据库无法正常停机、数据备份不一致、升级异常等问题。确认业务全部停止、无新增数据库连接后,再执行数据库停机操作

su – mysql
# 正常停止数据库
sh /home/mysql/stopMysql.sh
# 检查残留进程
ps -ef | grep mysqld
# 存在残留进程则强制查杀
pkill -9 mysqld

2、迁移数据与binlog日志目录(程序数据分离)

冷备份迁移旧版数据、binlog日志至独立固定目录,彻底脱离程序目录依赖

# 迁移业务数据文件
cp -a /home/mysql-8.0.30-el7-x86_64/data/* /home/mysql_data/
# 迁移二进制日志文件
cp -a /home/mysql-8.0.30-el7-x86_64/binlog/* /home/mysql_binlog/

3、 切换程序软链接至新版(root用户执行)

# 删除旧版本软链接
rm -f /home/mysql
# 创建新版程序软链接
ln -s /home/mysql-8.0.46 /home/mysql
# 校验权限
chown -R mysql:mysql /home/mysql

4、同步配置文件并修改路径参数

su – mysql
# 进入旧版目录,拷贝配置、启停脚本至新版目录
cd /home/mysql-8.0.30-el7-x86_64
cp -a my.cnf startMysql.sh stopMysql.sh ../mysql-8.0.46
# 进入新版目录,创建日志目录
cd /home/mysql-8.0.46 && mkdir log
# 修改数据目录绝对路径
sed -i 's#datadir = /home/mysql/data#datadir = /home/mysql_data#g' /home/mysql/my.cnf
# 修改binlog日志绝对路径
sed -i 's#log-bin=/home/mysql/binlog/mysql-bin.log#log-bin=/home/mysql_binlog/mysql-bin.log#g' /home/mysql/my.cnf

5、校验配置修改结果

# 校验数据目录配置
grep datadir /home/mysql/my.cnf
# 预期输出:datadir = /home/mysql_data
# 校验日志目录配置
grep log-bin /home/mysql/my.cnf
# 预期输出:log-bin=/home/mysql_binlog/mysql-bin.log

# 检验配置修改没问题,删除旧日志索引文件(存在索引文件还是会找以前的binlog日志会报错)
rm -f /home/mysql_binlog/mysql-bin.index

6、启动数据库并自动升级数据字典

# 启动MySQL服务
sh /home/mysql/startMysql.sh
# 实时监控日志,确认升级无报错、升级完成
tail -f /home/mysql/log/mysqld.err

四、升级后校验(必做,全部通过方可放开业务)

1、校验数据库版本

mysql –version
# 预期输出:mysql Ver 8.0.30 for Linux on x86_64 (MySQL Community Server – GPL)

2、校验业务数据完整性

校验标准:业务库、核心表数据行数与升级前一致,存储过程、触发器、定时任务无缺失、无异常

# 登录数据库(都是mysql用户执行)
mysql -umysql -h内网 -P3306 -p
# 核对业务库数据
USE 业务库;
SELECT COUNT(*) FROM 核心业务表;
# 校验存储过程、触发器、事件正常
SHOW PROCEDURE STATUS;
SHOW TRIGGERS;

五、升级故障完整回滚方案

若升级后出现启动异常、数据错误、业务报错等问题,需优先关停所有关联业务服务、断开数据库连接,再立即执行以下回滚操作,恢复旧版数据库环境,避免回滚过程中存在读写请求引发数据异常

su – mysql
# 1. 停止新版MySQL服务
sh /home/mysql/stopMysql.sh
# 2. 删除新版软链接,切回旧版8.0.30程序(root用户执行)
rm -f /home/mysql
ln -s /home/mysql-8.0.30-el7-x86_64 /home/mysql
# 3. 修复目录权限
chown -R mysql:mysql /home/mysql
# 4. 启动旧版数据库恢复业务
su – mysql
sh /home/mysql/startMysql.sh

六、Mysql启动优化(用systemctl管理)

1、mysqld.service 完整文件

cat > /usr/lib/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL 8.0.46 Database Server
Documentation=https://dev.mysql.com/doc/refman/8.0/en/
After=network.target

[Service]
User=mysql
Group=mysql
Basedir=/home/mysql
ExecStart=/home/mysql/bin/mysqld –defaults-file=/home/mysql/my.cnf
ExecStop=/home/mysql/bin/mysqladmin –defaults-file=/home/mysql/my.cnf shutdown
PIDFile=/home/mysql/mysqld.pid
Restart=on-failure
RestartSec=5
LimitNOFILE=100000
LimitSTACK=256M

[Install]
WantedBy=multi-user.target
EOF

2、生效服务配置

# 重载systemd配置
systemctl daemon-reload
# 设置开机自启
systemctl enable mysqld

3、日常运维命令

# 启动MySQL
systemctl start mysqld

# 优雅停止MySQL
systemctl stop mysqld

# 重启MySQL
systemctl restart mysqld

# 查看运行状态
systemctl status mysqld

# 实时跟踪数据库日志
journalctl -u mysqld -f

# 查看最近100行日志
journalctl -u mysqld -n 100

# 取消开机自启
systemctl disable mysqld

# 查看是否开机自启
systemctl is-enabled mysqld

4、配套校验说明

1、切换软链接升级 / 回滚 MySQL 版本,无需修改此 service 文件;
2、LimitNOFILE=100000 解决启动时 max_open_files 警告;
3、使用 mysqladmin 优雅关闭,避免强制 kill 丢失事务;
4、运行用户固定 mysql,和 my.cnf user=mysql 匹配,权限统一

七、整体操作注意事项

– 前置准备阶段全程无业务影响,必须完整执行备份操作,备份文件需确认生成成功;
– 旧版本程序目录禁止删除,全程保留,作为唯一回滚环境;
– 核心升级操作必须在业务低峰期停机窗口执行,前置准备可不停机操作,严禁不停机执行服务停止、数据迁移、软链接切换等高危操作;
– 配置文件路径修改必须核对无误,避免目录权限、路径错误导致启动失败;
– 升级后必须完成全量校验,未全部通过严禁放开业务流量;
– 回滚操作需快速执行,回滚完成后立即校验业务可用性,排查异常原因。

赞(0)
未经允许不得转载:171主机测评 » MySQL8.0.30升级8.0.46完整操作手册(含回滚方案)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址