先执行show global variables like 'datadir'确认真实路径,必须与配置文件一致;若为空则mysql未运行,需先停止服务再迁移;迁移用cp -r复制并校验文件完整性;修改my.cnf中datadir和socket路径,设置chown权限,处理selinux;启动失败时查journalctl日志,注意插件表、数据目录、端口占用及innodb日志文件匹配问题。

确认当前 datadir 路径
别急着改,先查清楚 MySQL 正在用哪个目录。直接连进 MySQL 执行:SHOW GLOBAL VARIABLES LIKE 'datadir';
输出的 Value 字段就是真实路径,比如 /var/lib/mysql。这个值必须和配置文件里的一致,否则启动会失败。如果查出来是空或报错,说明 MySQL 没跑起来,得先停服务再操作。
停服务 + 迁移数据文件
必须先停止 MySQL,否则文件可能被锁或损坏:systemctl stop mysqld(或 service mysqld stop)
迁移时注意三点:
- 用
cp -R复制(不是mv),保留原目录作备份; - 目标路径需提前创建,比如
/home/data/mysql; - 复制完立刻检查文件完整性:
ls -la /home/data/mysql看有没有ibdata1、mysql、performance_schema等关键子目录。
修改 my.cnf 并处理权限与 SELinux
编辑 /etc/my.cnf(或 /etc/mysql/my.cnf),只改两处关键项:
-
datadir=/home/data/mysql(必须绝对路径,不能有空格或中文); -
socket=/home/data/mysql/mysql.sock(很多教程漏这行,会导致客户端连不上)。
然后设权限:chown -R mysql:mysql /home/data/mysql
SELinux 必须关或放行——CentOS 7/8 默认开启,不处理会静默拒绝访问:
临时关:setenforce 0;
永久关:改 /etc/selinux/config 里 SELINUX=disabled,再重启。
启动失败常见原因
执行 systemctl start mysqld 后如果起不来,看日志:journalctl -u mysqld -n 50 -f
高频错误包括:
-
Can't open the mysql.plugin table:datadir指向了空目录或权限不对; -
Failed to find valid data directory:配置文件路径写错,或basedir没配(某些二进制包安装需要); -
Address already in use:端口被占,但更可能是mysqld进程卡死没退出干净,用ps aux | grep mysql杀掉残留进程再试。
真正麻烦的是 InnoDB 日志文件(ib_logfile0/1)不匹配新路径——它们不能简单复制,得删掉让 MySQL 重建(前提是已正常关闭,且没未提交事务)。











