今天分享一下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).sql
2 确认主从复制状态
在主库:
SHOW MASTER STATUS;

在从库:
SHOW SLAVE STATUSG;

确保从库:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
没有 Seconds_Behind_Master
很大
⚠️ 建议暂停应用写操作后,再确认一次状态!
3 停止数据库服务
🚫 一定要先停从库,再停主库。
# 从库systemctl stop mysqld# 主库systemctl stop mysqld
4 迁移数据目录
4.1 创建新目录
mkdir -p /dataroot/mysql/data
4.2 复制旧目录到新目录(保留权限/软链接等信息)
rsync -avhP /data/mysql/data/ /dataroot/mysql/data/
4.3 确认目录完整性
确保新目录数据完整、权限无误
ls -l /dataroot/mysql/data
5 修改配置文件
修改数据目录路径
主从库都要改
配置文件通常位置:/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/data
7 检查 systemd 配置(如有)
7.1 检查 mysqld.service 文件
vim /usr/lib/systemd/system/mysqld.service
如果里面有 datadir
,要和 my.cnf
保持一致。
7.2 重载 systemd
systemctl daemon-reexec
8 启动数据库服务
8.1 启动主库
systemctl start mysqld
检查日志:
tail -f /var/log/mysqld.log
8.2 启动从库
systemctl start mysqld
9 验证新数据目录是否生效
登录 MySQL,检查当前 datadir
:
mysql -uroot -p -e "SHOW VARIABLES LIKE 'datadir';"
输出应该是:/dataroot/mysql/data/

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

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