Linux CentOS 更改MySQL数据库目录位置
在 CentOS 系统上更改 MySQL(或 MariaDB)数据库目录位置(datadir
)需要谨慎操作,以避免数据丢失或服务启动失败。以下是详细步骤:
1. 停止 MySQL/MariaDB 服务
bash
复制
sudo systemctl stop mysqld # MySQL # 或 sudo systemctl stop mariadb # MariaDB
2. 确认当前数据目录位置
bash
复制
sudo mysql -e "SHOW VARIABLES LIKE 'datadir';"
默认位置通常是 /var/lib/mysql
。
3. 创建新数据目录
假设新目录为 /new/mysql/data
:
bash
复制
sudo mkdir -p /new/mysql/data sudo chown -R mysql:mysql /new/mysql/data # 确保权限正确 sudo chmod 750 /new/mysql/data # 设置安全权限
4. 复制数据文件到新位置
bash
复制
sudo rsync -av /var/lib/mysql/ /new/mysql/data/ # 或使用 cp(但 rsync 更可靠) sudo cp -rp /var/lib/mysql/* /new/mysql/data/
5. 修改 MySQL 配置文件
编辑配置文件(根据实际版本选择):
bash
复制
sudo vim /etc/my.cnf # 通常主配置文件 # 或 sudo vim /etc/mysql/my.cnf # 其他可能位置 # 或 sudo vim /etc/my.cnf.d/server.cnf # MariaDB
找到 [mysqld]
部分,修改或添加:
ini
复制
[mysqld] datadir=/new/mysql/data socket=/new/mysql/data/mysql.sock # 可选:同步更新socket路径
6. 更新 SELinux 上下文(如果启用)
bash
复制
sudo semanage fcontext -a -t mysqld_db_t "/new/mysql/data(/.*)?" sudo restorecon -Rv /new/mysql/data
7. 更新 AppArmor(如适用)
若系统使用 AppArmor,需修改配置:
bash
复制
sudo vim /etc/apparmor.d/usr.sbin.mysqld
将旧路径替换为新路径,然后重启 AppArmor:
bash
复制
sudo systemctl restart apparmor
8. 启动 MySQL/MariaDB 服务
bash
复制
sudo systemctl start mysqld # MySQL # 或 sudo systemctl start mariadb # MariaDB
9. 验证新数据目录
bash
复制
sudo mysql -e "SHOW VARIABLES LIKE 'datadir';"
确认输出是否为 /new/mysql/data
。
10. 清理旧数据(可选)
确认服务运行正常后,删除旧数据:
bash
复制
sudo rm -rf /var/lib/mysql
常见问题解决
-
启动失败
-
检查日志:
sudo journalctl -xe
或sudo tail -n 100 /var/log/mysqld.log
。 -
确保权限正确:
sudo chown -R mysql:mysql /new/mysql/data
。
-
-
Socket 路径问题
如果客户端工具(如mysql
命令)报错,需同步更新客户端配置:bash
复制
sudo vim /etc/my.cnf
添加:
ini
复制
[client] socket=/new/mysql/data/mysql.sock
总结
-
关键步骤:停服务 → 复制数据 → 改配置 → 修权限 → 启服务。
-
风险提示:操作前建议备份数据(
/var/lib/mysql
)。 -
适用于 CentOS 7/8 及 MySQL 5.7+/MariaDB 10+。