将 MySQL 数据目录从机械硬盘迁移到固态硬盘的完整指南(含命令详解)

172 阅读4分钟

在日常的服务器优化中,将 MySQL 的数据目录从机械硬盘(HDD)迁移到固态硬盘(SSD),是提升数据库读写性能的常见操作。本文将详细介绍在 Docker 环境中,如何安全、无缝地完成此迁移,并逐步解释每个 Shell 命令的作用与参数含义,帮助你更好地理解每一个操作步骤。


🛑 步骤 1:停止 MySQL 容器

在迁移数据前必须确保 MySQL 服务处于停止状态,以防止数据写入冲突或损坏。

bash

docker stop mysql
  • docker stop mysql:停止名为 mysql 的容器,确保数据库不再进行读写操作。

🧰 步骤 2:安装 rsync 工具

rsync 是一个高效、可靠的数据复制工具,支持校验同步、保留权限等特性,适合做数据迁移。

bash

yum install -y rsync
  • yum:CentOS 系列 Linux 使用的包管理工具。
  • install -y:自动确认安装,跳过人工输入 yes
  • rsync:安装用于高效同步文件的工具。

📦 步骤 3:备份原有 MySQL 数据目录

在任何迁移操作前,请务必备份,防止操作失误导致的数据丢失。

bash

cp -a /data/configs/mysql/data/ /data/configs/mysql/data.bak/
  • cp:复制命令。
  • -a:归档模式,等同于 -dpR,可以递归复制并保留文件属性(包括符号链接、权限、时间戳等)。

🚀 步骤 4:使用 rsync 同步数据到固态硬盘

将数据目录迁移到 SSD 路径(此处以 /root/mysql/ 为例),可以使用 rsync 进行可靠复制。

bash

rsync -ahX --progress --checksum /data/configs/mysql/data/ /root/mysql/

参数说明:

  • -a:归档模式,保留文件属性和目录结构。
  • -h:人类可读格式显示文件大小(如 MB、GB)。
  • -X:保留扩展属性(如 ACL、SELinux 标签),对于某些 Linux 权限设置非常关键。
  • --progress:显示复制过程中的详细进度。
  • --checksum:通过校验和方式对比源文件与目标文件,确保一致性,即使时间戳不同也能识别修改。

🔍 步骤 5:验证数据一致性

通过 diff 工具,对比源目录与目标目录,确保迁移后的数据完全一致。

bash

diff -rq /data/configs/mysql/data/ /root/mysql/

参数说明:

  • -r:递归比较所有子目录。
  • -q:仅报告文件是否不同,不显示详细差异。

如果没有任何输出,说明两个目录完全一致。


🧹 步骤 6:删除旧数据目录

确认数据迁移无误后,可删除旧的 MySQL 数据目录以释放空间。

bash

rm -rf /data/configs/mysql/data/

参数说明:

  • -r:递归删除目录及其内容。
  • -f:强制删除,不提示确认。

⚠️ 注意:此操作不可逆,请确保备份有效、数据验证成功!


🔗 步骤 7:创建软链接至新目录

为了避免修改 Docker Compose 或 MySQL 配置文件,可以通过软链接将新目录映射回原路径。

bash

ln -s /root/mysql/ /data/configs/mysql/data/

参数说明:

  • ln:创建链接。
  • -s:表示创建符号链接(软链接),非真实复制,指向新位置。

这样原有路径下的 MySQL 容器将仍能正常读取数据,而实际访问的是 SSD 上的新目录。

此处需确保/data/configs/mysql/data/ 最底层data目录不存在,如果已经存在data目录,软链接会直接链接为/root/mysql/->/data/configs/mysql/data/mysql 会导致多建了一个mysql目录,导致错误


🔁 步骤 8:再次验证软链接和数据一致性

确认软链接是否正确建立,并再次验证数据完整性。

bash

ll /data/configs/mysql/
diff -rq /data/configs/mysql/data/ /root/mysql/
  • ll:列出详细目录信息,确认软链接状态(如果 ll 无法使用,请用 ls -l)。
  • diff:再次确认目录数据一致。

✅ 步骤 9:重启 MySQL 服务

确认无误后,重启容器,数据库即正式运行在固态硬盘上。

bash

docker start mysql
  • docker start:启动指定容器。

🏁 总结

通过软链接技术,我们在不修改任何 MySQL 配置的前提下,将数据库的数据读写路径成功迁移到了 SSD 上,大大提升了 I/O 性能。这种方法操作简单、风险可控,非常适合生产环境中执行。