【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://www.pswp.cn/pingmian/95922.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据驱动下的连锁模式复制:技术科普与方法论深度解析

前言在连锁经营的赛道上,“复制”是核心命题,但绝非简单的“粘贴”。当行业进入数字化深水区,数据驱动正成为连锁模式突破增长瓶颈、实现高效复制的“隐形引擎”。本文将从技术科普与方法论心得两个维度,深度拆解数据如何重塑连锁…

数据库学习MySQL系列2、Windows11系统安装MySQL方法一.msi安装详细教程

方法一.msi安装详细教程 Windows系统下MySQL——.msi安装详细教程(默认--只安装服务端“Server only”)MySql官网地址:https://www.mysql.com/;快速下载通道请单击→ No thanks, just start my download.ps:其他资源(…

html+css+vue实现增删改查

代码如下&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>优化版 Vue.js CRUD 示例&l…

(计算机网络)DNS解析流程及两种途径

在计算机网络中&#xff0c;DNS&#xff08;Domain Name System&#xff09;用于 将域名解析为 IP 地址。一个完整的解析过程涉及 递归查询、迭代查询&#xff0c;以及多个关键角色&#xff08;LDNS、本地域名服务器&#xff1b;根服务器&#xff1b;顶级域名服务器&#xff1b…

数据结构——队列(Java)

一.基本概念 队列用来存储逻辑关系为“一对一”的数据&#xff0c;是一种“特殊”的线性存储结构。 特点&#xff1a; •先进先出&#xff1a;队列中元素的添加&#xff08;入队enqueue&#xff09;和移除&#xff08;出队dequeue&#xff09;遵循先进先出的原 则。 •端点&…

【Go】:mac 环境下GoFrame安装开发工具 gf-cli——gf_darwin_arm64

当前主要是关于gf_darwin_arm64的安装步骤 如何快速给mac电脑安装gfgf是什么安装步骤方法1&#xff1a;去github下载gf-cli去git上下载对应电脑版本的gf-cli验证下载文件是否二进制文件授予该文件权限方法2&#xff1a;去goframe官网教你下载步骤验证gf是否安装成功可能遇到的问…

【新】ApiHug官方文档-ApiHug Spring Security 扩展-补充说明

概述 在上次说明中我们写了ApiHug 如何做授权的&#xff0c; 这里有个概念的混淆&#xff0c; 其实 apihug 不是在spring security 上做的安全扩展&#xff0c; 应该是 apihug spring, 安全设计框架&#xff0c; 和本身 spring security 没有半毛钱关系&#xff0c; 而如果你…

【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇

概述&#xff1a;本篇是接着上一篇&#xff0c;细分出说明书的编写部分&#xff0c;实现这个功能的需求&#xff0c;是内部很多同事反馈&#xff0c;需要有个地方存工具&#xff0c;并且可以写说明书&#xff0c;如果需要的人&#xff0c;那么可以在界面上直接下载工具和查看工…

Mac设置中的安全性缺少“任何来源”

问题&#xff1a;用Mac安装软件&#xff0c;隐私性与安全性&#xff0c;想切换“任何来源”用来下载网站的app&#xff0c;但是菜单栏找不到“任何来源”选项&#xff0c;无法安装dmg的文件终端中一行代码设置出来&#xff1a;sudo spctl --global-disable &#xff08;禁用Mac…

uniapp开发小程序,列表 点击后加载更多数据

一、需求 1.初始显示限制:将每页条数limit改为5,确保初始只显示5条数据 2.查看更多功能:添加了loadMore方法,点击"查看更多"时加载下一页数据 3.实现查看更多功能,点击后加载更多数据 4.添加loading状态防止重复请求 添加hasMore状态判断是否还有更多数据 …

Windows 部署 Gerrit 与 Apache24 配置

Windows 部署 Gerrit 与 Apache24 并配置反向代理 准备工作 下载并安装 Java JDK 确保配置 JAVA_HOME 环境变量博主这里安装openjdk21 https://jdk.java.net/archive/下载所需软件 Apache24&#xff1a;https://httpd.apache.org/download.cgi Gerrit&#xff1a;https://www.g…

从 Excel 趋势线到机器学习:拆解 AI 背后的核心框架​

引言&#xff1a;你其实早就 “玩转” 过机器学习&#xff1f;提到 “机器学习”&#xff0c;你是不是第一时间联想到复杂的代码、密密麻麻的公式&#xff0c;还有那些让人头晕的 “算法”“模型”“训练” 术语&#xff1f;仿佛它是高高在上的技术&#xff0c;离我们的日常无比…

Lenovo联想YOGA Pro 16 IAH10 2025款笔记本电脑(83L0)开箱状态预装OEM原厂Win11系统

适用机型(MTM)&#xff1a;【83L0】 链接&#xff1a;https://pan.baidu.com/s/1tDpeBb93t1u0XIgqAZ3edg?pwdqy2r 提取码&#xff1a;qy2r 联想原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想浏览器、电脑管家、…

Android 开发 - 一些画板第三方库(DrawBoard、FingerPaintView、PaletteLib)

一、DrawBoard 1、Dependencies 模块级 build.gradle implementation com.github.jenly1314:drawboard:1.1.02、Test &#xff08;1&#xff09;Activity Layout activity_draw_board.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout …

捷多邦揭秘超厚铜板:从制造工艺到设计关键环节​

一、超厚铜板制造工艺要点超厚铜板&#xff08;3oz 及以上&#xff09;的制造工艺对精度和稳定性要求严苛&#xff0c;核心环节需突破多重技术壁垒。蚀刻工艺中&#xff0c;因铜箔厚度达 105μm 以上&#xff0c;需采用高浓度酸性蚀刻液&#xff08;氯化铜浓度控制在 180-220g/…

【MYSQL | 高级篇 MyCat实现分库分表】

摘要&#xff1a;本文围绕分库分表展开&#xff0c;先分析单库性能瓶颈&#xff0c;介绍垂直与水平拆分策略及实现技术&#xff0c;再详述 MyCat 中间件的概述、环境准备、目录结构&#xff0c;讲解其入门配置与测试&#xff0c;深入说明核心配置文件&#xff0c;最后演示垂直和…

Docker部署Drawnix开源白板工具

Drawnix简介 Drawnix 是一款开源的在线白板工具&#xff08;SaaS&#xff09;&#xff0c;集思维导图、流程图绘制、自由画图等多种功能于一体&#xff0c;支持协作与插件扩展&#xff0c;适用于个人创作、团队协作和远程办公场景。它完全免费且开源&#xff0c;提供丰富的编辑…

Griffin|增强现实数据集|无人机数据集

Griffin|增强现实数据集|无人机数据集 数据来源&#xff1a;huggingface 百度网盘 构建方式 Griffin数据集的构建采用了模块化架构&#xff0c;结合了CARLA和AirSim平台&#xff0c;通过模拟真实世界中的无人驾驶环境和无人机动态&#xff0c;收集了超过30,000帧图像数据&am…

力扣.1054距离相等的条形码力扣767.重构字符串力扣47.全排列II力扣980.不同路径III力扣509.斐波那契数列(记忆化搜索)

目录 力扣.1054距离相等的条形码 力扣767.重构字符串 力扣47.全排列II 力扣980.不同路径III 力扣509.斐波那契数列&#xff08;记忆化搜索) 力扣.1054距离相等的条形码 是否策略正确 但是假如 1 2 2 此时 1_2 此时中间只能填写2&#xff0c;但是就不对了&#xff0c;所…

「docker」二、3分钟快速理解docker核心要素

上一节中我们知道docker的作用&#xff0c;这节我们介绍一下docker的要素。 镜像 docker的核心要素里面有个叫镜像&#xff08;images&#xff09;的概念&#xff0c;镜像的作用就类似我们安装虚拟机用到的iso镜像文件。镜像里包含了我们要运行的应用&#xff0c;如&#xff…