libaio.so.1缺失时需按发行版安装对应包:centos/rhel用yum install -y libaio,ubuntu/debian用apt-get install -y libaio1,alpine用apk add libaio;装完执行ldconfig -p | grep aio验证,并用mysqld --initialize-insecure测试初始化。

MySQL 5.7 初始化失败,报 error while loading shared libraries: libaio.so.1: cannot open shared object file,直接原因是系统没装异步 I/O 库,不是配置或权限问题,装对包就能解决。
libaio.so.1 缺失时该装哪个包?看发行版选命令
不同 Linux 发行版的包名和安装命令不一致,装错就无效:
- CentOS/RHEL 7/8:运行
yum install -y libaio(注意不是libaio-devel,那个是编译用的) - Ubuntu/Debian:运行
apt-get install -y libaio1(libaio-dev可选,非必需) - Alpine(Docker 容器常见):运行
apk add libaio - Rocky/AlmaLinux 9:
dnf install -y libaio,部分镜像需先dnf update再装
装完怎么确认 libaio.so.1 真的可用?
别只信“Complete!”,要手动验证是否进动态链接缓存:
- 执行
ldconfig -p | grep aio,输出里必须含libaio.so.1(不是 .so.2 或其他) - 若没看到,补执行
ldconfig刷新缓存 - 再试一次初始化命令,例如:
mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql,不再报libaio.so.1错才算成功
为什么有时装了 libaio 还报其他 .so.x 缺失?
MySQL 5.7 二进制包是为较老系统编译的,新发行版(如 Rocky 9、Ubuntu 22.04+)常缺多个兼容库:
-
libnuma.so.1缺失 → 装numactl(RHEL/CentOS 用yum install -y numactl,Ubuntu 用apt-get install -y libnuma1) -
libncurses.so.5或libtinfo.so.5缺失 → 系统只有 .so.6,不能重装旧包,得建软链:ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5和ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5 -
libcrypt.so.1缺失(常见于 CentOS 8+)→ 装libxcrypt-compat(CentOS 8+)或libcrypt1(Debian 11+),不是libcrypt-devel
systemd 启动失败但 libaio 没问题?检查 service 文件本身
报 Failed to start mysqld.service 却没共享库错误,大概率是 unit 文件缺失或路径错:
- 确认
/usr/lib/systemd/system/mysqld.service或/etc/systemd/system/mysqld.service存在 - 打开该文件,检查
ExecStart=指向的mysqld路径是否真实存在(比如/usr/local/mysql/bin/mysqld) -
User=必须是mysql,且/var/run/mysqld目录属主得是mysql(chown mysql:mysql /var/run/mysqld) - 改完必须运行
systemctl daemon-reload,否则systemctl start mysqld仍读旧配置
真正麻烦的不是缺哪个库,而是新系统上 MySQL 5.7 的二进制包默认依赖一堆已淘汰的 .so.x 版本;逐个验证 ldd $(which mysqld) | grep "not found" 才能发现全部缺失项,光盯 libaio.so.1 容易漏掉后续报错。











