不能直接挂载,因为mysql运行时目录被占用,强行挂载会导致失败或数据不一致;即使停服,原有文件会被遮蔽,重启后丢失数据;且/dev/sdb1等设备名在重启后易因盘符漂移引发挂载错位甚至覆盖分区。

直接挂载到 /var/lib/mysql 是危险操作,必须先停服务、清空目录、用 UUID 挂载,并启用 noatime 和配额支持。
为什么不能直接 mount -t xfs /dev/sdb1 /var/lib/mysql
MySQL 进程正在运行时,/var/lib/mysql 目录被占用;强行挂载会失败或导致数据不一致。即使停掉 mysqld,若该目录下已有文件(如 ibdata1、ib_logfile*),mount 会成功但内容被新文件系统遮蔽——重启 MySQL 后找不到数据。更隐蔽的风险是:如果使用 /dev/sdb1 这类设备名写入 /etc/fstab,服务器重启后因盘符漂移(如 sdb 变成 sdc)导致挂载错位,MySQL 启动失败甚至覆盖其他分区。
正确流程:停服 → 清空 → 格式化 → 挂载 → 验证
按顺序执行以下步骤:
- 执行
sudo systemctl stop mysqld(或mysql,依发行版而定) - 确认无残留进程:
sudo lsof +D /var/lib/mysql应无输出 - 备份原数据(可选但强烈建议):
sudo cp -a /var/lib/mysql /var/lib/mysql.bak - 清空目录:
sudo rm -rf /var/lib/mysql/*(确保为空,否则挂载后不可见) - 格式化目标分区:
sudo mkfs.xfs -f /dev/sdb1(-f强制覆盖,避免提示) - 临时挂载验证:
sudo mount -t xfs -o noatime /dev/sdb1 /var/lib/mysql - 检查挂载结果:
df -Th /var/lib/mysql应显示xfs类型和正确容量
/etc/fstab 必须用 UUID,且加关键选项
不要写 /dev/sdb1,改用 UUID 避免盘符漂移:
- 查 UUID:
sudo blkid /dev/sdb1,输出类似/dev/sdb1: UUID="a1b2c3d4-..." TYPE="xfs" - 编辑
/etc/fstab,添加这一行:UUID=a1b2c3d4-... /var/lib/mysql xfs defaults,noatime,usrquota,grpquota 0 2 -
noatime减少日志写入,对数据库 I/O 敏感场景必要usrquota/grpquota为后续用xfs_quota做空间限制留接口0 2表示不 fsck,XFS 不需要启动时校验 - 测试配置:
sudo mount -a,无报错即生效
权限与 SELinux 容易被忽略的点
挂载后 MySQL 仍可能启动失败,常见原因:
- 目录属主错误:
sudo chown -R mysql:mysql /var/lib/mysql(用户组名依实际安装而定) - SELinux 上下文丢失:执行
sudo restorecon -Rv /var/lib/mysql,否则 mysqld 被拒绝访问 - AppArmor 或 systemd 保护机制:某些发行版(如 Ubuntu)需额外放行路径,检查
sudo journalctl -u mysqld -n 50看是否含Permission denied - 挂载点父目录权限:确保
/var/lib本身可被 mysql 用户 traverse(即至少有rx权限)
这些细节不处理,MySQL 就算能启动也可能无法创建表或写 binlog。











