【Linux】Rocky 9.8 操作系统磁盘分区与MySQL数据目录迁移

一、Rocky常用命令

|----|------------------------|-------------------------------|
| 序号 | 命令 | 描述 |
| 1 | cat /etc/rocky-release | 查看Rocky系统版本 |
| 2 | uname -r | 查看内核版本 |
| 3 | lsblk | 查看硬盘、分区、挂载点多大【不显示磁盘已用多少、剩余多少】 |
| 4 | df -h | 看容量、已用、剩余、使用率、挂载点 |
| 5 | fdisk -l | 识别物理硬盘【硬件分区层面】 |
| 6 | mkdir -p | 自动创建中间不存在的父级目录 |
| 7 | chown -R | 递归修改文件/目录的属主(所有者)以及属组 |
| 8 | vim | 文本编辑器(vi的增强版本) |
| 9 | pwd | 显示当前所在目录 |
| 10 | ls | 列出当前目录文件 |
| 11 | rm | 删除 |
| 12 | rm -rf | 递归删除 |
| 13 | cp | 复制 |
| 14 | mv | 移动/重命名 |
| 15 | cat | 查看文件内容 |
| 16 | ps aux | 查看所有进程 |
| 17 | kill PID | 杀掉进程 |
| 18 | kill -9 PID | 强制杀掉进程 |
| 19 | systemctl start 服务 | 启动服务 |
| 20 | systemctl stop 服务 | 停止服务 |
| 20 | systemctl restart 服务 | 重启服务 |
| 22 | systemctl status 服务 | 查看服务状态 |
| 23 | systemctl enable 服务 | 开启开机自启 |
| 24 | systemctl disable 服务 | 关闭开机自启 |

二、系统磁盘分区规则

2.1 安装默认自动分区(LVM)策略

Rocky9 安装界面【选择自动分区 (LVM)时】默认分配原则:

1、磁盘剩余空间小于 70G,Rocky9基本会把所有空间给根,Rocky10会以及安装器算法划分空间;

2、如果磁盘总空间大于等于 70G:根目录/最大分配70G,磁盘剩下全部剩余空间分配给rl‑home逻辑卷。

安装的时候可以将空间都给根,也可以分区。分区的好处是防止日志等程序意外将根打满导致系统崩溃。

2.2 各挂载点说明

devtmpfs:内存文件系统,提供设备节点,存放在内存,不占用硬盘

/dev/shm:共享内存,程序可以使用这块内存做高速共享;重启数据全部消失

/run:存放运行时进程 pid、socket,内存,重启清空

efivarfs:变量虚拟文件,用于 UEFI 固件,很小,不用关注磁盘使用率

rl‑root:根分区 / ;操作系统、/var、/etc默认全部在这里

/boot:约 1G,xfs,存放内核、initramfs启动镜像

/boot/efi:约 600M,EFI 系统分区

rl‑home:用户数据目录,自动分区时存放大量剩余磁盘空间

tmpfs:用户会话临时内存文件系统;user/0:root 登录会话

三、MySQL数据目录迁移至/home盘

**业务场景:**根分区空间紧张,MySQL 默认数据目录/var/lib/mysql占用大量磁盘,需要迁移至大空间的 /home 目录。

步骤1: 查看磁盘空间:df -h

****步骤2:****停止MySQL服务并检查是否有残留进程

停止服务:systemctl stop mysqld

查看进程:ps -ef |grep mysqld

****步骤3:****在/home目录下创建mysql数据目录

mkdir -p /home/mysql/data

****步骤4:****拷贝全部原有数据库文件(rsync 保留权限属性)

使用 rsync 比 cp 更适合迁移,完整保留文件权限、属主属组、selinux 标签属性,避免权限异常。

rsync -av /var/lib/mysql/ /home/mysql/data/

****步骤5:****修改目录属主属组

MySQL 进程默认运行用户是 mysql,不是 root,目录必须归属 mysql 用户,否则启动报错。

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

****步骤6:****SELinux 安全上下文配置(Rocky9 默认开启 SELinux)

Rocky默认开启 SELinux(强制安全防护机制,管进程能访问哪些文件),SELinux 还是会阻止 mysqld 读写 /home/mysql/data,mysql 启动直接失败(不要关闭 SELinux,修改永久策略)。

安装selinux工具:dnf install -y policycoreutils-python-utils

修改 SELinux 永久上下文规则(写进策略库,不是临时改):

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

应用策略,递归刷新目录

restorecon -Rv /home/mysql/data

步骤7: 修改MySQL配置文件

编辑配置文件:vim /etc/my.cnf

修改 mysqld 段

mysqld

datadir=/home/mysql/data

socket=/var/lib/mysql/mysql.sock

"socket"不要修改默认路径,它是本机 mysql 客户端和 mysql 服务之间通信的 "本地管道文件",不走 3306 端口

步骤8: 检查 systemd 服务沙箱 ProtectHome 参数

Rocky9 的 mysqld.service 存在沙箱隔离配置ProtectHome=true,开启后会屏蔽访问/home、/root目录,导致 MySQL 启动失败。

查看服务单元文件:systemctl cat mysqld

如果看到 ProtectHome=true,就执行 systemctl edit mysqld 添加关闭;【ProtectHome=true(systemd 沙箱隔离),systemd 启动 mysqld 的时候,直接隔离屏蔽掉 /home、/root、/run/user目录】

如果没有这一行,则不需要修改 service,跳过该步骤。

步骤9: 重载 systemd,启动 mysql服务

【判断】如果修改了 service 覆盖配置之后必须执行:systemctl daemonreload

启动mysql:systemctl start mysqld

查看mysql状态:systemctl status mysqld

步骤10: 启动成功后登录验证结果

mysql -uroot -p

show variables like '%datadir%';

确认 datadir 指向 /home/mysql/data 之后,先跑一会测试业务,确认数据没问题再去删除之前的随数据库。

也可进一步查看数据库列表:show databases;

相关推荐
高山有多高1 小时前
【Linux笔记】Socket编程基础
linux
吴声子夜歌1 小时前
Nginx应用与运维——Nginx Web服务应用实战(Python网站的搭建)
运维·前端·nginx
资深技术分享员2 小时前
Geejing WebBuilder 数据库连接配置与在线 SQL 工具,运维的左右手
运维·数据库·sql·低代码
高山有多高2 小时前
【Linux笔记】UpdSocket
linux·运维·笔记
皓月盈江2 小时前
Linux系统grep、sed 、awk介绍下,使用方法及区别?
linux·运维·服务器·sed·grep·awk
ao-weilai2 小时前
MySQL数据库:表操作
数据库·mysql·adb
宵时待雨2 小时前
MySQL数据库1:数据库基础
服务器·数据库·mysql
云栖梦泽2 小时前
Linux内存管理
linux·运维·服务器
吴声子夜歌2 小时前
Nginx应用与运维——Nginx Web服务应用实战(静态文件服务器的搭建)
运维·前端·nginx