mysql使用yum与apt进行版本升级的步骤

来源:这里教程网 时间:2026-02-28 20:40:05 作者:

MySQL 用 yum 升级(RHEL/CentOS/Fedora)

直接

yum update mysql
通常不会升级主版本(比如从 5.7 到 8.0),它只更新当前主版本内的小版本(如 8.0.33 → 8.0.34)。真要跨主版本,必须手动切换仓库并显式安装新包。

先确认当前版本:
mysql --version
rpm -qa | grep mysql
停服务:
sudo systemctl stop mysqld
备份数据目录(默认
/var/lib/mysql
)和配置文件(
/etc/my.cnf
/etc/my.cnf.d/
下)
添加新版官方仓库(例如 MySQL 8.0):
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
(注意 el9/el8/el7 要匹配系统)
禁用旧仓库、启用新仓库:
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql80-community
执行升级:
sudo yum update mysql-community-server
(不是
mysql
,那是客户端包)
启动前运行升级工具:
sudo mysqld --upgrade
(MySQL 8.0+ 自动触发,但建议显式执行)

MySQL 用 apt 升级(Ubuntu/Debian)

apt upgrade
同样只做小版本更新。跨主版本升级需更换 APT 源并使用
apt install
显式指定包名,否则
apt upgrade
会跳过主版本变更。

查当前状态:
mysql --version
dpkg -l | grep mysql-server
停止服务:
sudo systemctl stop mysql
完整备份:
/var/lib/mysql
+
/etc/mysql/
(含
my.cnf
conf.d/
下载新版 APT 配置包(如 MySQL 8.0):
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
,然后
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
(安装时选中目标版本仓库)
更新源列表:
sudo apt update
卸载旧服务包(保留数据):
sudo apt remove mysql-server
(不加
--purge
!)
安装新版服务:
sudo apt install mysql-server
(APT 会自动拉取对应仓库的最新主版本)
首次启动会自动运行
mysqld --initialize
mysql_upgrade
(MySQL 8.0.16+ 已弃用该命令,改由启动时内建升级逻辑处理)

升级后必验的兼容性断点

MySQL 主版本升级不是平滑过程,尤其 5.7 → 8.0 有大量破坏性变更,不验证会直接导致应用报错或查询结果异常。

sql_mode
默认值变了:8.0 启用了
STRICT_TRANS_TABLES
NO_ZERO_DATE
,老 SQL 插入非法日期可能被拒绝
认证插件变更:8.0 默认用
caching_sha2_password
,旧客户端(如 MySQL 5.7 客户端、某些 JDBC 驱动)连不上,需在用户创建时显式指定
IDENTIFIED WITH mysql_native_password
系统表结构升级:运行
sudo mysqld --upgrade
后检查错误日志(
/var/log/mysqld.log
),确认
mysql.help_topic
等表已重写
权限模型微调:8.0 的
CREATE USER
不再隐式授权,
GRANT
必须显式执行;旧 dump 文件里的
CREATE USER ... IDENTIFIED BY
语句在 8.0 可能失败

为什么不能跳过备份直接升级

MySQL 官方明确说明:主版本升级不保证回滚能力。一旦

mysqld --upgrade
执行完成,数据字典(
mysql.ibd
、系统表空间)即按新格式重写,5.7 的
mysqld
进程再也无法识别该目录。

物理备份(
cp -r /var/lib/mysql /backup/mysql-57-before-upgrade
)比逻辑备份(
mysqldump
)更可靠,因为后者可能漏掉不可见的元数据变更
升级失败后,唯一安全恢复方式是:停服务 → 替换整个
/var/lib/mysql
目录 → 重装旧版
mysql-community-server
包 → 启动
如果用 LVM 或快照,可在升级前打快照,比文件拷贝更快,但同样要确保快照时 MySQL 已静默(
FLUSH TABLES WITH READ LOCK
+
systemctl stop

相关推荐