在Linux环境下部署MySQL服务后,默认的数据库存储目录通常是/var/lib/mysql,当该分区磁盘空间不足,或者需要统一管理数据存储路径时,就需要手动更改MySQL的数据库目录位置。操作前建议先停止MySQL服务并备份原有数据,避免操作过程中出现数据丢失风险。

操作前准备
首先确认当前MySQL的运行状态,确保服务处于停止状态,同时备份原有的数据库数据,防止迁移过程中出现意外。执行以下命令停止MySQL服务:
# 停止MySQL服务,不同Linux发行版命令可能略有差异 systemctl stop mysqld # 或者 service mysql stop
备份原有数据目录,执行以下命令将/var/lib/mysql目录整体打包备份:
# 备份原有数据目录到/root目录 tar -czvf /root/mysql_data_backup.tar.gz /var/lib/mysql
修改MySQL配置文件
MySQL的核心配置文件通常是/etc/my.cnf,部分系统可能在/etc/mysql/my.cnf或者/etc/my.cnf.d/目录下,先找到对应的配置文件。打开配置文件后,找到[mysqld]段落,修改datadir和socket两个参数,指向新的目录路径:
[mysqld] # 原目录为/var/lib/mysql,修改为新的目录,比如/data/mysql datadir=/data/mysql socket=/data/mysql/mysql.sock # 如果有[client]段落,也需要修改socket路径,避免客户端连接报错 [client] socket=/data/mysql/mysql.sock
如果配置文件中没有上述参数,可以在对应段落手动添加,注意路径要和实际规划的新目录一致。
迁移数据文件并调整权限
创建新的数据库目录,并将原有数据文件复制到新目录中:
# 创建新的数据目录 mkdir -p /data/mysql # 复制原有数据到新目录,-a参数保留文件权限和属性 cp -a /var/lib/mysql/* /data/mysql/
MySQL的数据目录需要特定的用户和组权限,默认是mysql用户和mysql组,需要修改新目录的属主和属组:
# 修改新目录的属主和属组为mysql chown -R mysql:mysql /data/mysql # 设置目录权限,避免权限过高导致安全问题 chmod 750 /data/mysql
启动服务并验证
完成上述操作后,尝试启动MySQL服务,检查是否能正常启动:
# 启动MySQL服务 systemctl start mysqld # 查看服务状态,确认是否正常运行 systemctl status mysqld
如果服务启动失败,可以查看MySQL的错误日志,默认路径通常是/var/log/mysqld.log,根据日志提示排查问题,常见的问题包括路径权限不足、配置文件中路径写错、selinux限制等。
服务启动正常后,登录MySQL验证数据是否完整,查看当前的数据目录是否为新设置的路径:
-- 登录MySQL mysql -u root -p -- 查看当前数据目录路径 SHOW VARIABLES LIKE 'datadir';
如果返回的结果是/data/mysql/,说明数据库目录已经成功更改,原有数据也能正常访问。
常见问题处理
- 如果启动服务时报权限错误,检查新目录的属主是否为mysql,权限是否为750,同时确认selinux是否处于 enforcing 模式,若是可以先临时关闭selinux再测试:
setenforce 0 - 如果客户端连接时报找不到socket文件的错误,检查配置文件中[client]段落的socket路径是否和新目录下的mysql.sock路径一致
- 迁移完成后可以删除原有的/var/lib/mysql目录下的文件,释放磁盘空间,但建议先观察一段时间服务运行正常后再操作