ubuntu 22.04 官方源仅提供 mysql 8.0.x,不包含 8.4 lts;必须通过官方 mysql-apt-config 工具或清华镜像源添加 mysql 8.4 专用仓库才能安装,直接 apt install mysql-server 默认安装 8.0,且手动装 deb 包易因依赖失败。

Ubuntu 22.04 官方源不提供 MySQL 8.4,直接 apt install mysql-server 只能装到 8.0.x;必须通过 MySQL 官方 APT 源才能安装 8.4 LTS。
为什么 apt install mysql-server 不会装到 8.4
Ubuntu 22.04(jammy)的默认 /etc/apt/sources.list 里只有 mysql-server-8.0 包,apt-cache policy mysql-server 显示候选版本为 8.0.32-0ubuntu0.22.04.2 或类似。MySQL 8.4 是官方独立发布的 LTS 版本,未被 Ubuntu 团队同步进主仓库。
常见错误现象:
-
E: Version '8.4.8' for 'mysql-server' was not found—— 强制指定版本失败 -
dpkg -i mysql-server_8.4.8-1ubuntu22.04_amd64.deb报unmet dependencies—— 手动装 deb 包跳过依赖检查,极易出错
添加 MySQL 官方 APT 源的正确方式
不能手动编辑 /etc/apt/sources.list,必须用官方 mysql-apt-config 工具或清华镜像源配置,否则容易因架构/发行版代号写错(如把 jammy 写成 focal)导致 apt update 报 404。
推荐两种可靠方式:
- 用官方工具(最稳妥):
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.debsudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
选中MySQL Server & Cluster→ 空格勾选mysql-8.4→ Tab 切到 OK - 用清华镜像源(更快,适合国内):
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/mysql-archive-keyring.gpg --import RPM-GPG-KEY-mysql-2025echo "deb [signed-by=/usr/share/keyrings/mysql-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/mysql/apt/ubuntu jammy mysql-8.4-lts" | sudo tee /etc/apt/sources.list.d/mysql.list
之后统一执行:sudo apt update
确认输出中出现 Hit: https://repo.mysql.com/apt/ubuntu jammy InRelease 或清华镜像地址,才算源生效。
安装时的关键参数与验证步骤
安装命令就一条:sudo apt install mysql-community-server(注意是 mysql-community-server,不是 mysql-server;后者在官方源里仍指向 8.0)
安装后立刻验证:
-
mysql --version应输出类似mysql Ver 8.4.8 for Linux on x86_64 -
systemctl status mysql必须是active (running);若卡在activating,大概率是/var/lib/mysql权限不对或磁盘空间不足(8.4 初始化比 8.0 更严格) -
apt-cache policy mysql-community-server应显示候选版本为8.4.x
安装过程会创建 root@localhost 用户,但默认使用 auth_socket 插件(无密码,依赖系统用户权限),所以首次登录要用 sudo mysql,而非 mysql -u root -p。
安装后必须调整的两个兼容性配置
MySQL 8.4 默认启用强密码策略和严格 SQL 模式,旧应用几乎必连不上或建表失败。
立即修改 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 下追加:
[mysqld] validate_password = off sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
然后重启:sudo systemctl restart mysql
再执行:sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';"
这样后续才能用密码登录,也兼容大多数 ORM 和管理工具。
真正容易被忽略的是:即使源配置正确、安装成功、服务启动,只要没关 validate_password 和调低 sql_mode,绝大多数 PHP/Python/Node.js 项目都会在连接或执行 DDL 时静默失败——不是报错,而是直接断连或返回空结果。











