Ubuntu 24.04 上 apt install libaio1 报“没有可安装候选”是因为该包已被移除,应改用 libaio1t64 并手动创建软链接 libaio.so.1 指向 libaio.so.1t64.0.2,再执行 ldconfig 刷新缓存。

Ubuntu 24.04 上 apt-get install libaio1 报“没有可安装候选”怎么办
因为 Ubuntu 24.04 已彻底移除 libaio1 包,只提供 libaio2(对应 libaio.so.2),而 MySQL 5.7.44 等二进制包硬编码依赖 libaio.so.1,apt 找不到匹配包是正常现象,不是你源配置错了。
此时不能靠 apt update && apt upgrade 解决,必须手动补兼容库:
- 从 Ubuntu 22.04 官方仓库下载
libaio1_0.3.110-5_amd64.deb(x86_64 架构)或对应架构版本 - 用
dpkg -x libaio1_*.deb /tmp/libaio-extract解压出usr/lib/x86_64-linux-gnu/libaio.so.1.0.1 - 复制该文件到系统库路径:
sudo cp /tmp/libaio-extract/usr/lib/x86_64-linux-gnu/libaio.so.1.0.1 /usr/lib/x86_64-linux-gnu/ - 创建软链:
sudo ln -sf libaio.so.1.0.1 /usr/lib/x86_64-linux-gnu/libaio.so.1 - 运行
sudo ldconfig刷新缓存
验证 libaio.so.1 是否真正可用
光有文件名还不够,mysqld 启动时要能成功 dlopen()。最直接的验证方式是:
- 执行
ldd /path/to/mysqld | grep libaio,输出应为libaio.so.1 => /usr/lib/x86_64-linux-gnu/libaio.so.1 (0x...),不能是not found - 临时用
LD_LIBRARY_PATH测试(仅调试):LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu /path/to/mysqld --version,若能输出版本号,说明库加载通路已通 - 避免用
file /path/to/mysqld查 ABI——它只显示编译时链接信息,不反映运行时是否真能 resolve
为什么不能用 LD_LIBRARY_PATH 长期替代系统库路径
LD_LIBRARY_PATH 是进程级环境变量,对 systemd 服务、mysqld_safe 或其他 wrapper 脚本不可靠,尤其当它们显式重置环境时会失效。
- systemd 启动
mysqld.service时默认清空大部分环境变量,LD_LIBRARY_PATH不会被继承 -
mysqld_safe内部会调用exec启动真正的mysqld,且可能覆盖环境 - MySQL 5.7 某些子进程(如
numactl调用)不走LD_LIBRARY_PATH,仍会失败 - 生产环境必须让
libaio.so.1进入系统动态链接器搜索路径(即/usr/lib/x86_64-linux-gnu/+ldconfig)
除了 libaio1,Ubuntu 24.04 还容易缺哪些 MySQL 5.7 依赖
MySQL 5.7 在新系统上不是只缺一个 libaio.so.1,常见连带缺失项包括:
-
libtinfo5:Ubuntu 20.04+ 默认不带,mysqld启动时报libtinfo.so.5: cannot open shared object file;解决:下载libtinfo5_6.2-0ubuntu2_amd64.deb并同样提取安装 -
libssl1.1:Ubuntu 24.04 默认只有libssl3,MySQL 5.7 未适配 OpenSSL 3;解决:从 22.04 源下载libssl1.1_1.1.1f-3ubuntu4.1_amd64.deb -
libnuma1:虽然apt install libnuma1在 24.04 仍存在,但需确认安装后numactl命令可用,否则mysqld初始化时可能静默失败
这些库的 ABI 兼容性必须严格匹配——哪怕只差一个小版本号,mysqld 也可能在初始化中途 segfault,日志里却只报 “Aborted” 而无具体原因。











