首页 / 新闻资讯 / 技术教程

MySQL 数据目录迁移到数据盘

2026-05-22分类:技术教程顺云运营

系统盘用量报警,占空间的大户经常是 /var/lib/mysql。把数据目录整体迁到独立数据盘,四步完成:停服、复制、改配置、验证。整个过程业务要停写,选低峰期做。

## 一、停服并确认干净

应用侧先停写入或挂维护页,别只停定时任务就当万事大吉。然后停库,定时任务一并注释掉,避免迁移途中 cron 把服务拉起来。停库命令:

systemctl stop mysqld
ps -ef | grep mysqld

确认没有残留进程再动手,带着进程复制数据目录,复制出来的数据可能不一致。

## 二、复制目录并修正属主

新盘先完成格式化和挂载,写进 /etc/fstab 固定挂载点,重启后路径不丢;容量按现有数据量的两倍起步预留,数据库只会越长越大。之后:

rsync -av /var/lib/mysql/ /data/mysql/
chown -R mysql:mysql /data/mysql

rsync 会保留权限和属主,比 cp 稳;源路径结尾的斜杠表示拷贝目录内容而不是目录本身,别写错。属主不对是迁移后起不来的头号原因,chown 一定不要省。开启 SELinux(Linux 的强制访问控制机制)的机器还要执行 restorecon -Rv /data/mysql,否则照样拒绝访问。

## 三、改配置并启动

[mysqld]
datadir = /data/mysql
socket  = /data/mysql/mysql.sock

socket 路径变了的话,[client] 段里同步指过去,不然客户端还去老位置找;配置文件里 [mysqld_safe] 段也可能引用路径,一并检查。然后 systemctl start mysqld。

## 四、验证与收尾

三件事确认:mysql -uroot -p 能正常进入;SHOW VARIABLES LIKE 'datadir' 指向新路径;用业务账号连上跑几个核心查询。迁移后顺手检查备份脚本里的路径引用,配置还指向老目录的情况不少见。都正常后,旧目录改名保留几天:

mv /var/lib/mysql /var/lib/mysql.bak

别急着删。万一要回滚,把配置改回去、目录改回来、重启,十分钟内结束战斗。

启动失败时先看 error.log:Permission denied 查属主和 SELinux,找不到 sock 查 socket 配置,日志里写得很明白。

数据大的库 rsync 也要几分钟,这段窗口业务是停的。正式迁移前拿测试库把四步完整演练一遍,到点上就心里有底。数据盘选型看写入性能,数据库对磁盘延迟敏感,盘的档次差距会直接写进查询耗时里。

技术教程