MySQL 数据目录(datadir)是存储数据库文件的核心位置,包括表结构、数据、日志等。调整它通常是为了迁移数据、释放系统盘空间、提升 I/O 性能或统一管理路径。操作本身不难,但必须谨慎,否则会导致 MySQL 无法启动或数据丢失。
确认当前数据目录位置
登录 MySQL 后执行以下命令查看当前 datadir:
mysql> SHOW VARIABLES LIKE 'datadir';输出类似:
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
这个路径就是你当前的数据存放位置,后续所有操作都以此为基础。
停止 MySQL 服务并备份原数据
在修改前务必先停服务,再完整备份原始数据目录:
Linux 下执行:sudo systemctl stop mysql(或 mysqld,取决于发行版) 创建安全备份:sudo cp -r /var/lib/mysql /var/lib/mysql_backup 检查备份完整性,确保所有子目录和文件都已复制跳过备份或未完全停止服务就移动文件,极易引发元数据损坏。
移动数据目录到新路径
假设你想把数据移到 /data/mysql:
创建目标目录:sudo mkdir -p /data/mysql 赋予权限(保持与原目录一致,通常是 mysql 用户):sudo chown -R mysql:mysql /data/mysql 复制全部内容(不是移动):sudo cp -rp /var/lib/mysql/* /data/mysql/ 验证文件数量和权限是否一致,尤其注意 ibdata1、ib_logfile*、mysql 系统库目录是否存在修改配置并重启服务
编辑 MySQL 主配置文件(常见路径:/etc/my.cnf 或 /etc/mysql/my.cnf):
找到 [mysqld] 段,在其中添加或修改:datadir = /data/mysql 如果启用了 SELinux(如 CentOS/RHEL),还需更新上下文:
sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
sudo restorecon -Rv /data/mysql 保存后启动服务:sudo systemctl start mysql 检查是否成功:sudo systemctl status mysql,再进 MySQL 执行 SHOW DATABASES; 确认数据可读
若启动失败,查看错误日志(默认在 datadir 下的 hostname.err),常见问题包括权限不对、SELinux 限制、配置语法错误或残留 pid 文件。
