暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL集群数据目录满了,如何迁移

9

今天分享一下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)

# 或使用 rsync
rsync -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 STATUS\G;

复制

确保从库:

  • 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/data
chmod 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 STATUS\G;"

复制

✅ 关键状态

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
  • Seconds_Behind_Master: 0
    (或很小)

11 验证应用访问与功能

  1. 确认业务可以正常访问 MySQL

  2. 检查主从复制 10-30 分钟稳定同步

  3. 观察 mysqld.log
    ,确保无报错

本次分享结束!


关注小编,添,可进入技术交流群。


往期推荐


文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论