必须停服后迁移并验证权限与上下文:先用SHOW VARIABLES LIKE 'datadir'确认绝对路径,再systemctl stop mysqld停库,rsync -av --chown=mysql:mysql复制数据,同步修改my.cnf中datadir、socket、pid-file,确保SELinux上下文和750权限正确,最后查错误日志验证启动。

确认当前 datadir 路径是否可读
执行 mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';",输出必须是绝对路径且 MySQL 进程有读权限。常见陷阱是命令返回空或报错 Access denied —— 此时先用 sudo mysql -u root(跳过密码验证)或检查 ~/.my.cnf 是否配置了正确凭据。如果返回路径是 /var/lib/mysql,但磁盘已满,说明迁移必要性成立。
停库后用 rsync 复制而非 cp
rsync 能保留所有元数据(权限、时间戳、SELinux 上下文),而 cp -a 在某些发行版(如 CentOS 7)上可能丢掉 SELinux 标签,导致启动失败。操作顺序必须是:
- 先
systemctl stop mysqld(注意服务名可能是mysqld或mysql,查systemctl list-unit-files | grep mysql确认) - 再
rsync -av --chown=mysql:mysql /var/lib/mysql/ /new/datadir/(末尾斜杠不能少,否则会把源目录整个复制进去) - 最后验证新目录下有
ibdata1、mysql、performance_schema等基础目录
修改 my.cnf 时必须同步 socket 和 pid-file
只改 datadir 不够。MySQL 启动时会根据 datadir 推导默认 socket 和 pid-file 路径,但若旧配置残留,会导致找不到 socket 文件而连不上。务必在 [mysqld] 段显式指定:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
[mysqld] datadir = /new/datadir socket = /new/datadir/mysql.sock pid-file = /new/datadir/mysqld.pid
同时检查 [client] 段是否也设置了 socket,否则本地 mysql -u root -p 会连错实例。
SELinux 和权限问题最容易卡住启动
CentOS/RHEL 系统默认启用 SELinux,即使 chown -R mysql:mysql /new/datadir 成功,MySQL 仍可能因上下文不匹配拒绝访问。解决方法分两步:
- 临时关闭验证:
setenforce 0,启动成功后再恢复setenforce 1;若能启动,说明是 SELinux 问题 - 永久修复:
semanage fcontext -a -t mysqld_db_t "/new/datadir(/.*)?",然后restorecon -Rv /new/datadir
另外,/new/datadir 目录权限必须是 750(不是 755),且属主属组严格为 mysql:mysql —— chmod 777 是危险操作,MySQL 8.0+ 会直接拒绝启动。
Starting MySQL... ERROR! The server quit without updating PID file,此时要盯住 /var/log/mysqld.log 最后几行,而不是反复重启服务。

















