Linux CentOS 更改MySQL数据库目录位置

在 CentOS 系统上迁移 MySQL/MariaDB 数据目录的完整操作流程如下:
一、前期准备
确认当前数据目录
bash
Copy Code
mysql -e "SHOW VARIABLES LIKE 'datadir';" | grep datadir
# 默认路径通常为 /var/lib/mysql
创建新数据目录
bash
Copy Code
sudo mkdir -p /new/data/path # 例如 /data/mysql
sudo chown -R mysql:mysql /new/data/path
sudo chmod 750 /new/data/path
停止数据库服务
bash
Copy Code
sudo systemctl stop mysqld # MySQL 官方版
sudo systemctl stop mariadb # MariaDB
二、数据迁移操作
复制数据库文件(保持权限)
bash
Copy Code
sudo rsync -av /var/lib/mysql/ /new/data/path/
# 比 cp 命令更安全的替代方案,保留权限和符号链接
备份原数据目录
bash
Copy Code
sudo mv /var/lib/mysql /var/lib/mysql.bak
三、配置修改
修改主配置文件
bash
Copy Code
sudo vim /etc/my.cnf
修改或添加以下配置项:
ini
Copy Code
[mysqld]
datadir=/new/data/path
socket=/new/data/path/mysql.sock # 同步修改 socket 路径
[client]
socket=/new/data/path/mysql.sock
更新 AppArmor/SELinux 策略(CentOS 7+)
bash
Copy Code
# 修改 SELinux 上下文
sudo semanage fcontext -a -t mysqld_db_t "/new/data/path(/.*)?"
sudo restorecon -Rv /new/data/path
四、服务重启与验证
启动数据库服务
bash
Copy Code
sudo systemctl start mysqld
检查服务状态
bash
Copy Code
sudo systemctl status mysqld
journalctl -u mysqld -b --no-pager | grep -i error
验证数据目录
bash
Copy Code
mysql -e "SHOW VARIABLES LIKE 'datadir';"
五、后续清理
删除备份目录(确认服务正常后)
bash
Copy Code
sudo rm -rf /var/lib/mysql.bak
调整防火墙规则(如有必要)
bash
Copy Code
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
六、故障排查要点
权限问题修复
bash
Copy Code
sudo chown -R mysql:mysql /new/data/path
sudo chcon -R -t mysqld_db_t /new/data/path
日志分析
bash
Copy Code
sudo tail -50 /var/log/mysqld.log # MySQL 官方版日志
sudo tail -50 /var/log/mariadb/mariadb.log
应急回滚方案
bash
Copy Code
sudo systemctl stop mysqld
sudo rm -rf /var/lib/mysql
sudo mv /var/lib/mysql.bak /var/lib/mysql
sudo systemctl start mysqld
附:不同存储引擎注意事项
InnoDB 引擎补充配置
ini
Copy Code
innodb_data_home_dir = /new/data/path
innodb_log_group_home_dir = /new/data/path
MyISAM 表维护
bash
Copy Code
mysqlcheck -u root -p --all-databases
通过以上步骤可安全完成数据目录迁移。建议在生产环境操作前进行完整备份 (mysqldump -A > full_backup.sql),并选择业务低峰期执行操作。
