今天分享一下MySQL主从复制集群如何迁移数据目录。
操作目标
将主库和从库的数据目录 从 ➡️ /data/mysql/data/迁移到 ➡️ /dataroot/mysql/data/
接下来是迁移的详细步骤
1 迁移前准备
1.1 备份数据库数据
在进行数据目录迁移之前,一定要做好完整备份!主库和从库都需要备份。可以通过物理备份或逻辑备份两种方式
备份方法 1:物理备份
使用 rsync 或 cp 直接备份当前 data 目录
# 停止 MySQL 服务(避免写入导致数据不一致)systemctl stop mysqld# 备份当前数据目录cp -a /data/mysq/data /data/mysql/data_bak_$(date +%F)# 或使用 rsyncrsync -avh /data/mysql/data/ /data/mysql/data_bak_$(date +%F)/备份方法 2:逻辑备份(按需)
mysqldump -uroot -p --all-databases --master-data=2 --single-transaction --flush-logs - --triggers --routines > /backup/mysql_full_$(date +%F).sql2 确认主从复制状态
在主库:
SHOW MASTER STATUS;
在从库:
SHOW SLAVE STATUSG;
确保从库:
Slave_IO_Running: YesSlave_SQL_Running: Yes没有 Seconds_Behind_Master很大
⚠️ 建议暂停应用写操作后,再确认一次状态!
3 停止数据库服务
🚫 一定要先停从库,再停主库。
# 从库systemctl stop mysqld# 主库systemctl stop mysqld4 迁移数据目录
4.1 创建新目录
mkdir -p /dataroot/mysql/data4.2 复制旧目录到新目录(保留权限/软链接等信息)
rsync -avhP /data/mysql/data/ /dataroot/mysql/data/4.3 确认目录完整性
确保新目录数据完整、权限无误
ls -l /dataroot/mysql/data5 修改配置文件
修改数据目录路径
主从库都要改
配置文件通常位置:/etc/my.cnf 或 /etc/mysql/my.cnf;有些是自定义的
我的配置文件是/data/mysql/my.cnf
[mysqld]datadir=/dataroot/mysql/data# socket 文件路径(如有需要),我的socket不放在之前的数据目录下,我不修改# socket=/dataroot/mysql/data/mysql.sock 6 权限设置
6.1 修改目录权限
确保 mysql 用户拥有新目录权限
chown -R mysql:mysql /dataroot/mysql/datachmod 750 /dataroot/mysql/data7 检查 systemd 配置(如有)
7.1 检查 mysqld.service 文件
vim /usr/lib/systemd/system/mysqld.service如果里面有 datadir,要和 my.cnf 保持一致。
7.2 重载 systemd
systemctl daemon-reexec8 启动数据库服务
8.1 启动主库
systemctl start mysqld检查日志:
tail -f /var/log/mysqld.log8.2 启动从库
systemctl start mysqld9 验证新数据目录是否生效
登录 MySQL,检查当前 datadir:
mysql -uroot -p -e "SHOW VARIABLES LIKE 'datadir';"输出应该是:/dataroot/mysql/data/

10 验证主从同步状态
在从库执行:
mysql -uroot -p -e "SHOW SLAVE STATUSG;"✅ 关键状态
Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0(或很小)

11 验证应用访问与功能
确认业务可以正常访问 MySQL
检查主从复制 10-30 分钟稳定同步
观察
mysqld.log,确保无报错
本次分享结束!
关注小编,添加微信,可进入技术交流群。

