MySQL 装完第一次启动,systemctl status mysql 显示 failed,日志里一行 error while loading shared libraries: libaio.so.1: cannot open shared object file。不是配置问题,系统缺一个异步 IO 的库。

libaio 是 Linux 的异步 IO 接口,MySQL、Oracle 和部分备份工具都依赖它。很多精简版系统镜像默认不带。

按发行版装

  • CentOS、RHEL、openEuler:yum install -y libaio,最小化安装常常连这个都没有。
  • Ubuntu、Debian:包名是 libaio1,apt install -y libaio1。
  • 银河麒麟、统信 UOS:基于 Debian 的用 libaio1,基于 RHEL 的用 libaio,先看 os-release 里的信息再决定。

装包之前先确认源里有这个包,yum search libaio 或者 apt-cache search libaio 都能查。本地源缺包时装不上,报的错和缺库很像,容易绕进去。

装完先别急着重启服务,用 ldconfig -p 配合 grep 看库有没有进缓存。能看到 libaio.so.1 这一行,才算真的可用。

装完还报错就往下查

有时候报的是 libaio.so.1,但系统里已经有更高的版本,比如只有 libaio.so.1.0.1 却没有 .so.1 的软链。这种情况多半是手动拷贝库文件造成的,重新用包管理器装一遍就能补上链接。

32 位的程序跑在 64 位系统上,需要 libaio.i686 或者 libaio1:i386。用 file 命令看出错的可执行文件是 32 位还是 64 位,再决定装哪个。

ldd 那个可执行文件能列出所有找不到的依赖,经常是一串而不是只有一个。按顺序补齐,别装一个重启一次。依赖齐了 mysqld 能起来,再去看数据目录权限和配置文件,问题通常就结束了。

顺带说一句,容器镜像里缺这个库更常见,Dockerfile 里补一行装 libaio1 就行,别在运行中的容器里手装,重建一次全没了。