mysql启动失败主因是符号链接目标路径不存在、权限不符、selinux/apparmor拦截或innodb全局文件缺失;须逐级验证目标目录存在性、mysql属主、挂载状态、安全策略及ibdata1/ibtmp1/ib_logfile*完整性。

符号链接指向的 datadir 不存在或权限不对
MySQL 启动时会严格校验 datadir 路径是否存在、是否可读写。迁移后若用软链接(如 /var/lib/mysql → /data/mysql)但目标路径未创建、挂载失败或属主不是 mysql 用户,mysqld 会静默退出,日志里通常只报 InnoDB: Unable to lock ./ibdata1 或直接提示 Can't change dir to '/data/mysql/' (Errcode: 2)。
检查步骤和操作建议:
- 运行
ls -l /var/lib/mysql确认软链接是否指向真实存在的目录; - 用
stat /data/mysql(把/data/mysql换成你实际的目标路径)看目录是否存在、UID/GID 是否为mysql; - 若目录存在但属主不对,执行
sudo chown -R mysql:mysql /data/mysql; - 若目录不存在,先创建并赋权:
sudo mkdir -p /data/mysql && sudo chown mysql:mysql /data/mysql; - 别忘了检查父路径(如
/data)是否挂载成功,df -h /data和mount | grep data都要看。
my.cnf 中的 datadir 写成了软链接路径本身
常见误区:把 datadir = /var/lib/mysql(软链接路径)留在配置里,而没改成真实路径。MySQL 8.0+ 默认不跟随符号链接,尤其在启用 secure_file_priv 或 SELinux 启用时,会拒绝启动。
必须确保 my.cnf(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf)中 [mysqld] 段下的 datadir 值是**绝对真实路径**,而不是软链接名:
- 错误写法:
datadir = /var/lib/mysql(而该路径是软链接); - 正确写法:
datadir = /data/mysql(即软链接最终指向的物理路径); - 改完后用
sudo mysqld --defaults-file=/etc/my.cnf --validate-config校验语法; - 再确认
sudo ls -ld $(grep datadir /etc/my.cnf | awk '{print $3}')输出的确实是可访问目录。
SELinux 或 AppArmor 阻止访问符号链接目标
在 CentOS/RHEL 或 Ubuntu 上,即使路径和权限都对,安全模块也可能拦截对软链接目标的访问。典型现象是 systemctl status mysqld 显示 “failed”,但错误日志空或只有“Permission denied”。
临时验证是否是它导致的:
- CentOS/RHEL:运行
sudo setenforce 0(临时禁用 SELinux),再试sudo systemctl start mysqld; - Ubuntu:运行
sudo aa-status看 AppArmor 是否启用,再查sudo journalctl -u mysql | grep avc是否有拒绝记录; - 若禁用后能启动,说明策略限制了访问 —— 正确做法不是永久关 SELinux,而是用
semanage fcontext添加上下文,例如:sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?",然后sudo restorecon -Rv /data/mysql。
迁移时遗漏 ibtmp1 或 redo log 文件
符号链接迁移常只复制数据库子目录(如 test/、mysql/),但忽略 ibtmp1、ib_logfile0、ib_logfile1 这些 InnoDB 全局文件。它们必须和 ibdata1 一起放在 datadir 根下,否则 MySQL 启动时检测到日志序列号不匹配,会直接 abort。
处理方式很直接:
- 停掉源库,确保无写入;
- 把源
datadir根目录下所有以ib_开头的文件(ibdata1、ibtmp1、ib_logfile*)全部复制过去; - 如果目的端已有这些文件,且你不确定状态,最稳妥的是删掉(前提是已备份好整个
datadir),让 MySQL 启动时重建; - 注意:删
ib_logfile*不丢数据,但删ibdata1会丢系统表空间 —— 别删,除非你明确要初始化新实例。











