唯一权威答案是执行SELECT @@datadir;确认真实路径,再用df -h查其所在分区使用率(≥95%才需迁移);停库后用rsync -av --delete-after --exclude='*.sock' --checksum同步数据;必须同步更新my.cnf中socket、pid-file、log-error等配套路径,并处理SELinux权限及文件系统兼容性。

确认当前datadir真实路径和空间瓶颈
别信配置文件或记忆里的默认路径,SELECT @@datadir; 才是唯一权威答案。执行后得到的路径(比如 /var/lib/mysql 或 /data/mysql-8.0.20/data)才是 MySQL 实际在读写的目录。紧接着用 df -h 查这个路径所在分区的使用率——如果 ≥95%,且目标盘(如 /mnt/data)剩余空间充足,迁移才有实际意义。
容易踩的坑:
- 只用
du -sh /var/lib/mysql看大小,却忽略 LVM、overlayfs 或已删除但被 mysqld 占用的文件句柄(可用lsof +L1检查) - 误以为迁移能“边跑边做”,MySQL 8.0 不支持运行时修改
datadir,硬改会导致ibdata1损坏或实例不可恢复
停库后用rsync完成数据迁移
必须先停服务:sudo systemctl stop mysqld,再用 ps aux | grep mysqld 确认进程彻底退出。迁移不推荐 cp,它不保留 socket 权限、跳过打开的临时表、无法校验一致性。
正确做法是两遍 rsync:
- 第一遍(可选预同步):
rsync -av --progress /var/lib/mysql/ /mnt/data/mysql/(注意源路径末尾斜杠!) - 停库后第二遍(增量+校验):
rsync -av --delete-after --exclude='*.sock' --checksum /var/lib/mysql/ /mnt/data/mysql/ -
--exclude='*.sock'防止把运行时套接字文件复制过去,否则启动会冲突 -
--checksum强制按内容比对,避免因时间戳或权限差异漏同步
改配置前必须处理SELinux与权限
在 CentOS/RHEL 上,datadir 换到非标准路径(如 /mnt/data/mysql)后,mysqld 会因 SELinux 策略拒绝访问,报错 [ERROR] [MY-011011] Failed to find valid data directory。
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
两个选择(任选其一):
- 保留 SELinux 启用状态:执行
semanage fcontext -a -t mysqld_db_t "/mnt/data/mysql(/.*)?",再restorecon -Rv /mnt/data/mysql - 临时禁用(仅测试环境):
setenforce 0,但生产环境不建议 - 权限必须是
mysql:mysql,目录权限为750;父目录(如/mnt/data)不能是777,否则 mysqld 主动拒绝启动
同步更新socket、pid-file等配套路径
只改 datadir 是最常见失败原因。MySQL 启动失败报 The server quit without updating PID file,基本就是这些路径没跟着一起换。
在 my.cnf 的 [mysqld] 段中,必须同时更新:
datadir=/mnt/data/mysqlsocket=/mnt/data/mysql/mysql.sockpid-file=/mnt/data/mysql/mysqld.pid-
log-error=/mnt/data/mysql/error.log(如果原配置启用了)
启动前手动创建空日志文件并授权:touch /mnt/data/mysql/error.log && chown mysql:mysql /mnt/data/mysql/error.log。验证命令:mysql -S /mnt/data/mysql/mysql.sock -e "SELECT 1;"。
真正麻烦的不是复制或改配置,而是新路径挂载选项(如 XFS 的 reflink、ext4 的 dax)或文件系统特性与 InnoDB 的隐式兼容性——这些细节往往在启动数小时后才暴露,务必在迁移后持续观察错误日志至少一个完整业务周期。

















