当前位置: 首页 > news >正文

【Linux】MySQL数据目录迁移步骤(含流程图踩坑经验)

在生产环境中,有时候你会遇到一些看似简单但实际上很棘手的问题。最近我就碰到了一次典型的服务器磁盘空间告急,最后通过迁移 MySQL 数据目录成功解决了问题。本文记录整个过程,包括我的分析思路、迁移步骤、踩坑和经验总结,希望对你有帮助。


一、问题背景

公司的一台业务数据库服务器,运行的是 MySQL 8.0.20,数据目录默认放在:

/data/mysql-8.0.20/data

随着业务数据的增长,/data 分区的空间渐渐被吃满,监控报警开始提示:

Disk space usage on /data exceeds 98%

打开 df -h 一看,果然 /data 分区只剩不到 1GB,而 /home 分区却很空闲,有几十 MB 可用。


二、分析思路

  1. 确认空间问题是否由 MySQL 引起

    du -sh /data/mysql-8.0.20/data
    

    结果:

    38G /data/mysql-8.0.20/data
    

    → 明确是 MySQL 数据目录占了大头。

  2. 能否扩容 /data 分区?

    • 由于这台是虚拟机,业务部门不方便短期扩容。
    • 考虑将数据目录迁移至磁盘更大的 /home 分区
  3. 迁移 MySQL 数据目录的关键点

    • 必须 停库迁移,否则数据会不一致。
    • 迁移后需要修改 配置文件 datadir
    • 新路径权限必须正确(mysql:mysql,SELinux 要处理)。
    • 迁移过程要有 回退方案(先复制,验证成功后再删旧数据)。

三、实现步骤

在正式进行迁移前,我们先看一下整个迁移的流程图,帮助你对后续的步骤有直观印象。
在这里插入图片描述

1. 停止 MySQL 服务

sudo systemctl stop mysqld
ps -ef | grep mysqld   # 确认进程关闭

2. 创建新目录

sudo mkdir -p /home/mysql/data

3. 迁移数据

建议先复制,确保安全:

sudo cp -av /data/mysql-8.0.20/data/* /home/mysql/data/

(等验证 OK 再删除旧目录)


4. 修改 MySQL 配置

编辑 /etc/my.cnf(路径可能不同,根据实际环境调整):

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

5. 更新权限

sudo chown -R mysql:mysql /home/mysql/data
sudo chmod 750 /home/mysql/data

6. SELinux 处理(重要)

CentOS / RHEL 默认 /home 属于 home_t 类型,MySQL 无法直接访问,需要修改安全上下文:

查看 SELinux 状态:

getenforce

如果输出 Enforcing,执行:

sudo semanage fcontext -a -t mysqld_db_t "/home/mysql/data(/.*)?"
sudo restorecon -Rv /home/mysql/data

(如果只是验证,可以先用 setenforce 0 暂时关闭 SELinux)


7. 启动 MySQL

sudo systemctl start mysqld

8. 验证新目录生效

SHOW VARIABLES LIKE 'datadir';

结果应为:

/home/mysql/data/

9. 清理旧目录

确认 MySQL 稳定运行几天再删除旧目录:

sudo rm -rf /data/mysql-8.0.20/data

四、踩坑记录

在迁移过程中我踩了一些坑,也分享出来避免大家踩同样的雷:

  1. 忘记改权限 → 启动失败

    The server quit without updating PID file
    

    解决:chown -R mysql:mysql /home/mysql/data

  2. SELinux 拒绝访问新目录

    • 关闭 SELinux 后启动成功 → 说明是安全上下文问题
    • 永久解决:使用 semanage fcontextrestorecon 修改为 mysqld_db_t
  3. 客户端连接失败

    • 因为 socket 文件路径变了,要同步修改 [client] 部分的 socket 配置

五、经验总结

  1. 生产环境操作一定要有回退方案

    • cp 而不是直接 mv
    • 保留旧数据目录,确认没问题后再删
  2. 权限和 SELinux 是 MySQL 无法启动的核心原因

    • 迁移路径后务必 chown + SELinux 规则调整
  3. 提前规划数据目录的位置

    • 尽量放在可扩容的分区,或者挂载点规划时预留足够磁盘空间
  4. 验证后再清理

    • 保留一段时间旧目录,是救命稻草

六、参考命令速查表

# 停mysql
systemctl stop mysqld# 拷贝数据目录
cp -av /data/mysql-8.0.20/data/* /home/mysql/data/# 修改配置文件
vim /etc/my.cnf# 权限
chown -R mysql:mysql /home/mysql/data
chmod 750 /home/mysql/data# SELinux规则调整
semanage fcontext -a -t mysqld_db_t "/home/mysql/data(/.*)?"
restorecon -Rv /home/mysql/data# 启动MySQL
systemctl start mysqld# 验证数据目录
SHOW VARIABLES LIKE 'datadir';

💡 写在最后
这次迁移虽然只是换了个目录,但背后体现的是处理 🛠 生产问题的三个关键能力

  • 快速定位根因
  • 制定低风险方案
  • 预留回退路径

实际生产中,看似琐碎的小问题,通过“按步骤 + 防风险”去执行,才不会把小问题变成大事故。


文章转载自:

http://tdkRw5mA.jfcbs.cn
http://M7LxTwBZ.jfcbs.cn
http://U1f4dAbf.jfcbs.cn
http://F7yZHz86.jfcbs.cn
http://fKykCm8L.jfcbs.cn
http://umLz5OWf.jfcbs.cn
http://3aKnH7yd.jfcbs.cn
http://jqtzJX7R.jfcbs.cn
http://mwTCK7sx.jfcbs.cn
http://FUsyOPLg.jfcbs.cn
http://5Wy5ba6l.jfcbs.cn
http://fiXz72TX.jfcbs.cn
http://YiW7G2qp.jfcbs.cn
http://67Tr7eUD.jfcbs.cn
http://YiD7S9wm.jfcbs.cn
http://vvVKkze4.jfcbs.cn
http://nw3oqDf7.jfcbs.cn
http://Rd2FTSdj.jfcbs.cn
http://4sMOHfKs.jfcbs.cn
http://S2XDItZV.jfcbs.cn
http://lAUTQw4w.jfcbs.cn
http://R7qLuCqL.jfcbs.cn
http://f6S85hef.jfcbs.cn
http://twPX0rSj.jfcbs.cn
http://wFZVRl2t.jfcbs.cn
http://yMDHZA2x.jfcbs.cn
http://rFLzDrbI.jfcbs.cn
http://2KloEuPw.jfcbs.cn
http://fXcMgbvG.jfcbs.cn
http://bC3XeAw6.jfcbs.cn
http://www.dtcms.com/a/372796.html

相关文章:

  • LangChain: Evaluation(评估)
  • 在电路浪涌测试中,TVS(瞬态电压抑制二极管)的防护效果确实会受到陪测设备中去耦网络(Decoupling Network,DN)的显著影响
  • 深入了解linux系统—— 日志
  • 3D开发工具HOOPS助力造船业数字化转型,打造更高效、更智能的船舶设计与协作!
  • 大语言模型时代文本水印技术的综述解读
  • 《WINDOWS 环境下32位汇编语言程序设计》第13章 过程控制(2)
  • 1. 统计推断-基于神经网络与Langevin扩散的自适应潜变量建模与优化
  • STM32U575RIT6 简单代码(参考模板)
  • 在新发布的AI论文中 pytorch 和tensorflow 的使用比例
  • Chapter3—单例模式
  • k8s可视化的解决方案及技术选型
  • K8s Ingress Annotations参数使用指南
  • Kubernetes(K8S)入门以及命令指南
  • 自建prometheus监控腾讯云k8s集群
  • Go 1.25在性能方面做了哪些提升?
  • Next.js数据获取入门:`getStaticProps` 与 `getServerSideProps`
  • 为什么要在出口路由器router配置NAT与默认路由
  • 如何 正确使用 nrm 工具 管理镜像源
  • http response的工作流程详细解析
  • FastDFS(分布式RPC调用和分布式文件储存)
  • 国内开源时序数据库IoTDB介绍
  • TCL电视机音乐播放器动效背景模仿
  • 深入解析:Vue与React的异步批处理更新机制
  • 基于Spring Boot的火灾报警系统的设计与实现(代码+数据库+LW)
  • Spring Boot的配置文件加载顺序和规则
  • B.30.10.05-JVM电商实战应用
  • vulhub fastjson 1.2.24 反序列化导致任意命令执行漏洞
  • [特殊字符] 跨端视频通话实战:腾讯云 TRTC + IM(React Native Web)
  • 【重学 MySQL】九十八、MySQL用户管理全指南:创建、修改、删除
  • 2025时序数据库选型,以IoTDB为主从架构基因到AI赋能来解析