一、前言
在企业生产环境中,mysql 主要分为两种部署方式:系统包部署(rpm/debian)与二进制包手动部署。
使用系统包安装 mysql 时,系统会自动生成 systemd 服务文件,直接支持 systemct启停、自启、状态管理。但二进制手动安装的 mysql 不会自动注册系统服务,只能依靠手动命令启停,无法实现开机自启、统一运维管理,稳定性和可维护性较差。
与此同时,mysql 5.7 逐渐停止维护,绝大多数企业需要将数据库平滑升级至 mysql 8.0。相比于全量迁移、重新部署,就地升级可以保留原有数据目录、无需迁移业务数据,是生产环境最低风险的升级方案。
本文将完整复现两大核心运维场景:
1. 为二进制 mysql 手动配置 systemd 服务托管,实现标准化运维;
2. 基于 mysql shell 预检,完成 mysql5.7 就地平滑升级至 mysql8.0。
二、环境说明
操作系统:centos / rocky linux(支持 systemd)
原有环境:二进制部署 mysql 5.7
升级目标:mysql 8.0 商业版(二进制包)
运维方式:systemd 统一托管
升级方式:就地升级(保留原数据、仅替换程序)
三、场景一:二进制 mysql 配置 systemd 标准化托管
二进制安装的 mysql 默认不受 systemd 管理,无法开机自启、无法通过系统命令统一运维。本章节手把手完成服务接入。
1. 安全停止 mysql 服务
修改服务配置前,必须优雅停机,避免数据文件损坏:
mysqladmin -uroot -p shutdown
输入 root 密码后,mysql 会正常关闭,终端输出 mysqld 停止日志,代表停机成功。
2. 部署 mysqld.service 系统服务文件
将适配 mysql5.7 的服务单元文件放入 systemd 系统目录,让系统识别 mysql 服务:
cp /labs/service-5.7/mysqld.service /usr/lib/systemd/system
3. 配置 mysql 开机自启
systemctl enable mysqld.service
执行后自动创建服务软链接,服务器重启即可自动拉起 mysql。
4. 启动服务并验证托管状态
systemctl start mysqld systemctl status mysqld
页面显示 active (running) 绿色状态,说明 mysql 已成功交由 systemd 托管,支持启停、重启、状态监控等标准化运维操作。
四、场景二:mysql5.7 就地平滑升级至 mysql8.0
就地升级核心优势:不迁移数据、不改动库表、仅替换二进制程序 + 更新服务配置。升级前必须通过 mysql shell 做兼容性检测,提前规避升级失败风险。
1. 安装 mysql shell 升级工具
mysql 8.0 官方推荐使用 mysql shell 做升级预检,提前检测语法、字段、参数兼容性:
cd /stage/mysql-shell yum -y install mysql-shell-*.rpm
2. 执行升级兼容性预检
mysqlsh root@localhost -- util checkforserverupgrade
输入数据库 root 密码,工具自动扫描当前数据库环境,检测是否存在废弃语法、不兼容参数、数据字典异常等问题。存在高危报错必须修复后再升级。
3. 停止 mysql5.7 旧服务
systemctl stop mysqld systemctl status mysqld
确认状态为 inactive (dead),保证服务完全停止。
4. 解压 mysql8.0 二进制包
将新版本解压至 /opt,实现双版本共存,方便回滚:
cd /opt tar xf /stage/mysql-server/mysql-commercial-8*.tar.gz ls /opt
此时目录中同时存在 5.7、8.0 两个版本,保证升级可控、可回滚。
5. 替换 mysql 软链接,切换程序版本
系统默认通过 /usr/local/mysql 识别 mysql 程序,通过软链接快速完成版本切换:
rm /usr/local/mysql ln -s /opt/mysql-commercial-8* /usr/local/mysql
6. 替换适配 8.0 的 systemd 服务文件
mysql5.7 与 8.0 启动参数、运行机制不同,需要更新服务配置:
cp /labs/service-8.0/mysqld.service /usr/lib/systemd/system
提示覆盖输入 y 确认。
7. 重载系统服务配置
systemctl daemon-reload
让 systemd 识别新版服务配置。
8. 启动 mysql8.0 并验证服务
systemctl start mysqld systemctl status mysqld
状态为 active (running) 代表新版本启动成功。
9. 关于 mysql_upgrade 废弃说明
在 mysql8.0 中,mysql_upgrade 命令已彻底废弃。
8.0 服务启动时会自动完成数据字典、系统表、元数据升级适配,无需人工干预,手动执行旧命令会提示工具不存在。
10. 查看升级日志、确认版本
systemctl status mysqld -l mysqld --version
日志可查看数据字典升级记录,版本命令输出 8.0 版本信息,代表就地升级圆满完成。
五、核心命令汇总
命令 | 功能说明 |
mysqladmin -uroot -p shutdown | 安全停机 mysql |
systemctl enable mysqld | 配置开机自启 |
systemctl start/stop/status mysqld | 服务启停与状态查看 |
yum 安装 mysql-shell | 安装升级检测工具 |
mysqlsh 升级检测命令 | 5.7 升级 8.0 兼容性预检 |
tar xf 解压包 | 解压 mysql8.0 二进制程序 |
rm / ln -s | 切换 mysql 软链接版本 |
systemctl daemon-reload | 重载 systemd 配置 |
mysqld --version | 核验数据库版本 |
六、生产避坑总结
1. 二进制 mysql 必须配置 systemd,否则无法实现自启与标准化运维;
2. 升级预检必不可少,大量升级失败都是因为忽略废弃参数、不兼容语法;
3. 禁止暴力 kill 停机,必须优雅关机,防止表空间损坏;
4. mysql8.0 自动升级数据字典,不再需要 mysql_upgrade;
5. 升级保留旧版本目录,出现异常可秒级回滚。
七、总结
本文完整实现了二进制 mysql 的 systemd 托管改造与 mysql5.7 至 8.0 的就地升级全流程。通过手动部署服务文件,彻底解决二进制部署数据库无法统一运维的问题;通过软链接替换程序、搭配官方升级预检工具,实现了低风险、无数据迁移、可回滚的版本升级方案。
整套流程完全贴合企业运维真实场景,兼顾规范性、安全性与实用性,可作为生产环境 mysql 标准化改造与版本升级的参考方案。
到此这篇关于mysql数据库版本升级的文章就介绍到这了,更多相关mysql版本升级内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论