Ubuntu 22.04 默认 apt install mysql-server 安装的是 Canonical 维护的稳定版(如 8.0.33–8.0.37),非 Oracle 官方最新小版本;要安装指定版本(如 8.0.33 或 8.4.8),须用 mysql-apt-config 工具正确配置官方源并勾选目标子版本,再执行 sudo apt install mysql-server=完整版本号,且需验证 apt-cache policy 和 apt list -a 输出一致。

为什么 apt install mysql-server 总是装错版本
因为 Ubuntu 默认源里的 mysql-server 包由 Canonical 维护,版本固定(如 22.04 默认是 8.0.33–8.0.37),不随 MySQL 官方更新;而官方 APT 源默认启用的是 latest channel(比如当前是 8.4.x),但你没显式禁用/切换子源,apt 就会从已启用且优先级高的源拉包——哪怕你本地有多个版本配置,只要 mysql84-community 或 mysql80-community 源同时 enabled,就会冲突或取错。
怎么用 mysql-apt-config 选对子源并确认生效
必须用官方 mysql-apt-config 工具配置,不能手动改 /etc/apt/sources.list:路径写错(比如把 jammy 写成 focal)会导致 apt update 报 404;交互界面里选中 MySQL Server & Cluster 后,要用空格键单独勾选目标版本(如 mysql-8.4),再 Tab 切到 OK 确认。安装完立刻验证:
-
apt-cache policy mysql-server输出里Installed:和Candidate:应一致且含目标小版本(如8.4.8-1ubuntu22.04) -
apt list -a mysql-server要能看到该版本在可选列表中 - 若仍显示 8.0.x,说明源未生效,重装
mysql-apt-config并检查是否误勾了多个版本
安装时如何锁定 8.0.33 这类精确小版本
官方 APT 源支持 = 语法指定完整版本号,但前提是版本名必须与 apt list -a 显示的完全一致(包括后缀)。例如 Ubuntu 22.04 上装 8.0.33:
- 先运行
apt list -a mysql-server,找到匹配项:mysql-server/unknown,now 8.0.33-1ubuntu22.04 amd64 [installed] - 执行
sudo apt install mysql-server=8.0.33-1ubuntu22.04 - 装完立刻
sudo apt-mark hold mysql-server,否则下次apt upgrade会覆盖 - 注意:不要写
mysql-server=8.0.33—— 缺少后缀会导致E: Version '8.0.33' for 'mysql-server' was not found
装完启动失败最常踩的三个坑
MySQL 8.4 初始化比 8.0 更严格,systemctl start mysql 卡在 activating 或直接退出,大概率是以下之一:
-
/var/lib/mysql非空或属主不对:先sudo rm -rf /var/lib/mysql/*,再sudo chown -R mysql:mysql /var/lib/mysql -
/etc/my.cnf存在且含语法错误(比如多一个=或注释符错位):用sudo mysqld --validate-config提前检查 - 磁盘空间不足或 SELinux 拦截 socket 创建:用
sudo journalctl -u mysql -n 50 --no-pager查看真实错误,而非只看systemctl status的概括
版本混用最容易被忽略:比如用 mysql-apt-config 装了 8.4,但系统里残留 mysql-client 5.7 的 deb 包,dpkg -l | grep mysql 能暴露这类隐性冲突。


















