mysql启动硬依赖libaio.so.1,rhel/centos/almalinux/rocky 8+/9、ubuntu 22.04/24.04、kylin v10、alpine等系统默认不带该库;ubuntu 24.04需装libaio1t64并手动创建指向libaio.so.1t64.0.2的软链,再ldconfig刷新,最后用ldd验证mysqld能否解析。

MySQL 二进制包(尤其是 5.7、8.0、8.4 及部分 9.6.0 预览版)在启动时硬依赖 libaio.so.1,不是可选优化项,而是 InnoDB 异步 I/O 的底层支撑。它不参与编译过程,但运行时由动态链接器强制加载——缺失即崩溃,且错误信息非常明确:error while loading shared libraries: libaio.so.1: cannot open shared object file。
哪些系统默认不带 libaio.so.1?
这不是“你装错了”,而是发行版策略差异:
- RHEL/CentOS/AlmaLinux/Rocky 8+ 和 9:最小化安装镜像默认禁用
libaio,认为它是“性能增强组件”而非基础运行时 - Ubuntu 22.04/24.04:预装的是
libaio1t64(提供libaio.so.1t64.0.2),不再提供传统libaio1包;libaio2(提供libaio.so.2)与 MySQL 不兼容 - Kylin V10(SP1/SP2 安全加固模板)、Alpine Linux(Docker 场景):同样精简掉该库,以满足等保或镜像体积要求
为什么装了 libaio1 还报错?
常见于 Ubuntu 24.04 和部分国产系统,本质是符号链接缺失:
-
apt install libaio1t64后,真实文件是/usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2 - MySQL 启动时只认
libaio.so.1(注意后缀,不是.so或.so.2) - 系统不会自动创建兼容链接,
ldconfig -p | grep aio只显示libaio.so.1t64.0.2,不显示libaio.so.1 - 别试
libaio.so.1.0.1这类旧名——ABI 不兼容,可能引发静默写入失败
怎么验证 libaio.so.1 确实就绪?
不能只看安装命令是否成功,必须走完三步验证链:
- 确认文件存在:
ls /usr/lib/x86_64-linux-gnu/libaio.so.1(应为软链接,指向libaio.so.1t64.0.2或类似) - 确认已入缓存:
ldconfig -p | grep 'libaio\.so\.1$'(结尾必须是.so.1,不能多字符) - 确认 mysqld 能解析:
ldd $(which mysqld) | grep libaio应输出类似libaio.so.1 => /usr/lib/x86_64-linux-gnu/libaio.so.1 (0x...)
最容易被忽略的是第三步:即使 ldconfig -p 显示正常,ldd 仍可能报 not found——说明链接路径不对,或 mysqld 二进制实际位于非标准路径(如 /usr/local/mysql/bin/mysqld),此时要对那个具体路径执行 ldd。











