缺失的是libaio.so.1符号链接,而非libaio1包未安装;ubuntu 24.04安装libaio1t64后提供的是libaio.so.1t64.0.2,mysql硬依赖libaio.so.1,需手动创建软链接并执行ldconfig刷新缓存。

确认缺失的是 libaio.so.1 还是版本号不匹配
报错里出现 libaio.so.1: cannot open shared object file,不代表系统没装 libaio1 包,很可能是已安装的库文件名不一致。Ubuntu 24.04 及部分国产系统(如 Kylin V10)安装 libaio1t64 后,实际提供的是 libaio.so.1t64.0.2,而 MySQL 二进制明确检查 libaio.so.1 这个名字——不是找不到包,是找不到“对得上名”的符号链接。
- 运行
dpkg -L libaio1t64 | grep so查看真实路径(通常是/usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2) - 再执行
ls -l /usr/lib/x86_64-linux-gnu/libaio.so*,看有没有现成的libaio.so.1链接 - 如果只有
.so.1t64.0.2而没有.so.1,就得手动补链接;如果有但指向错误,得先删掉再重建
在 Ubuntu/Debian 上安全创建 libaio.so.1 软链接
比改 LD_LIBRARY_PATH 或复制文件更稳妥:直接在系统库路径下建软链接,不影响其他程序,也无需重启服务。
- 确认目标文件存在:
ls /usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2 - 进入库目录:
cd /usr/lib/x86_64-linux-gnu - 创建链接:
sudo ln -sf libaio.so.1t64.0.2 libaio.so.1 - 刷新动态库缓存:
sudo ldconfig - 验证是否生效:
ldconfig -p | grep libaio应同时显示libaio.so.1和libaio.so.1t64.0.2
注意:不要指向 libaio.so(无版本号),MySQL 启动时会明确校验 .so.1 后缀;也不要覆盖成 libaio.so.1.0.1 这类旧名,ABI 不兼容风险高。
离线环境或版本冲突时的替代方案
如果是离线安装,或遇到 libaio1 (>= 0.3.110) 这类版本范围锁死问题(常见于 Ubuntu 20.04 上装 MySQL 8.0.30),不能靠 apt install 解决。
- 从 Ubuntu 官方归档源下载指定版本 deb 包,例如:
wget http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.110-5_amd64.deb - 用
dpkg -i --force-depends强制安装(仅限离线且确认 ABI 兼容) - 安装后立即锁定:
sudo apt-mark hold libaio1,防止后续 apt upgrade 覆盖 - CentOS/RHEL 离线场景则用
yumdownloader libaio提前获取对应架构 RPM,再按顺序rpm -ivh libaio-*.rpm && rpm -ivh mysql-*.rpm
别跳过 glibc 和架构一致性检查
即使 libaio.so.1 搞定了,MySQL 还可能因底层不兼容启动失败。尤其在 Kylin、Alpine 或老旧 CentOS 上:
- 用
ldd /usr/sbin/mysqld | grep "not found"再扫一遍所有缺失依赖 - 检查
glibc版本:ldd --version,MySQL 8.0+ 通常要求 ≥ 2.17;若系统是 CentOS 6 或 glibc 2.12,强行装新版 MySQL 必崩 - RPM 包的架构必须严格匹配:
libaio-0.3.109-13.el7.x86_64.rpm不能装到 arm64 的 Kylin 上,哪怕都是 RPM - 银河麒麟等定制系统,
.ky10后缀可能导致 rpm 版本比较逻辑出错(字符串比对误判0.3.109 ),此时需手动绕过 requires 校验或换用适配包
真正卡住的往往不是 libaio.so.1 这个名字,而是它背后牵扯的 ABI 兼容性、glibc 绑定、架构对齐这三层隐性约束。看到 “not found”,先别急着 ln -s,多跑两行 ldd 和 dpkg -L 看清实际提供了什么。











