ubuntu 24.04 默认仓库不提供 mysql 8.4,apt install mysql-server 实际安装的是 mariadb 11.4;需手动下载 oracle 官方适配 22.04 的 .deb 包并解决 libaio1 符号链接等依赖问题才能在 24.04 上运行 mysql 8.4。

Ubuntu 24.04 LTS 默认仓库中**没有 MySQL 8.4**,它只提供 mysql-server(实际是 MariaDB 11.4)或旧版 MySQL 8.0。想装 MySQL 8.4,必须从 Oracle 官方 APT 仓库手动添加——否则你装的不是 MySQL,而是 MariaDB,或者版本远低于 8.4。
为什么 sudo apt install mysql-server 装不到 8.4?
Ubuntu 24.04 的 main 和 universe 仓库已将 mysql-server 包名重定向至 mariadb-server。运行该命令实际安装的是 MariaDB 11.4,并伴随 mysqld 进程、/etc/mysql/mariadb.conf.d/ 配置路径等全套 MariaDB 生态,和 MySQL 完全不兼容。
Oracle 官方未将 MySQL 8.4 提交进 Ubuntu 官方源,也未发布适配 Noble Numbat(24.04 代号)的 .deb 包;当前仅支持 focal(20.04)、jammy(22.04)和 lunar(23.04)的 APT 仓库。直接用 apt 添加官方源会报 404 Not Found 错误。
可行路径只有两条:
- 降级使用 Ubuntu 22.04 + MySQL 8.4 官方 APT(推荐生产环境)
- 在 24.04 上手动下载
.deb包并用dpkg -i安装(需自行解决依赖,不建议)
用 dpkg 手动安装 MySQL 8.4 的真实步骤
Oracle 官网提供的是 mysql-server_8.4.x-1ubuntu22.04_amd64.deb(标称适配 22.04),但它在 24.04 上可运行,前提是补全缺失依赖。关键不是“能不能装”,而是“装完能不能启动”。
执行前先确认系统架构:uname -m 应为 x86_64;然后依次运行:
curl -OL https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-server_8.4.3-1ubuntu22.04_amd64.deb sudo apt update && sudo apt install -y libmecab2 libaio1 libnuma1 sudo dpkg -i mysql-server_8.4.3-1ubuntu22.04_amd64.deb sudo apt --fix-broken install -y
注意:libaio1 在 24.04 中已更名为 libaio1t64,但 MySQL 8.4 的 .deb 控制文件仍硬依赖旧名。需先创建符号链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1 /usr/lib/x86_64-linux-gnu/libaio.so
否则 mysqld 启动时会报错:error while loading shared libraries: libaio.so.1: cannot open shared object file。
mysqld 启动失败的三个高频原因
即使 dpkg 安装成功,systemctl start mysql 仍大概率失败。常见卡点如下:
-
/var/lib/mysql目录权限错误:MySQL 8.4 要求属主为mysql:mysql,且不能有 world-writable 权限;若之前装过 MariaDB,残留目录权限常为root:root - 配置文件冲突:
/etc/mysql/my.cnf若存在且包含!includedir /etc/mysql/conf.d/,而该目录下有 MariaDB 的50-server.cnf,会导致mysqld解析失败退出 - 默认认证插件不兼容:MySQL 8.4 默认用
caching_sha2_password,但某些客户端(如旧版 PHP PDO)不支持;若要兼容,需在[mysqld]段加default_authentication_plugin=mysql_native_password
验证是否真启动成功,别只看 systemctl status mysql 的 active 状态——得执行:sudo mysqladmin -u root -p ping,输入临时密码(首次启动后在 /var/log/mysql/error.log 中搜 A temporary password)。
配置文件路径和初始化逻辑必须改掉的默认项
MySQL 8.4 不再读取 /etc/mysql/my.cnf 作为主配置,而是优先加载 /etc/mysql/mysql.conf.d/mysqld.cnf。但如果你删了它,mysqld 会回退到内置默认值(比如 max_connections=151,远低于生产需求)。
务必检查并调整以下几项:
-
bind-address:默认是127.0.0.1,远程连接需改为0.0.0.0或具体 IP,并确保ufw放行3306 -
sql_mode:8.4 默认启用严格模式,含STRICT_TRANS_TABLES;若应用老 SQL 兼容性差,可设为NO_ENGINE_SUBSTITUTION -
log_error:默认写入/var/log/mysql/error.log,但该路径可能无写权限;建议显式指定并chown mysql:mysql对应目录
改完配置后不要只 systemctl restart mysql,先用 sudo mysqld --defaults-file=/etc/mysql/mysql.conf.d/mysqld.cnf --validate-config 校验语法,避免配置错误导致服务无法拉起。
最麻烦的不是安装,是后续升级:MySQL 8.4 的 deb 包不带 apt 自动更新能力,每次小版本更新都得手动下载、dpkg -i、mysql_upgrade(已弃用)、改权限、重校验配置——这些操作一旦漏掉一步,就可能让数据库无法启动或数据损坏。











