CentOS7使用LVM快照两分钟备份数据:手慢也能救回整盘
CentOS7使用LVM快照两分钟备份数据

线上跑着的网站突然提示数据库锁死,老板在耳边吼“多久能恢复?”——如果你提前给系统做了LVM快照,这时候只需两分钟就能把数据原样拖回来,连熬夜都不必。下面这份笔记把CentOS7下用LVM快照做极速备份的整套流程拆成四步,照着敲命令,新手也能一次成功。
LVM快照到底省在哪
传统备份要把整盘数据复制到别处,磁盘越大时间越长。LVM快照只在原卷发生写入时记录“改动前的块”,没改动的块直接指向原卷,所以创建瞬间完成,空间也省得惊人——一个40G的业务盘,初始快照往往不到1G。更香的是,快照卷可挂载、可读写,相当于给磁盘装了时光机,回滚时直接合并即可,连关机都不需要。
动手前的三句叮嘱
1. 只有用LVM管理的分区才能玩快照,fdisk -l里看到“/dev/mapper/xxx”字样才算合格。
快照不是镜像,原卷持续写入会撑大快照卷,一定给它留20%以上剩余空间。

快照卷名字别乱起,以日期结尾,回滚时一眼认出,谁用谁知道。
一分钟创建快照
假设系统盘叫/dev/centos/root,想备份/var/lib/mysql:
lvcreate -s -n mysql_snap20230628 -L 8G /dev/centos/root
-s代表snapshot,8G是给快照卷预留的“改动空间”,只要原卷新增+修改不超过8G,快照就稳如老狗。命令回显“Logical volume "mysql_snap20230628" created”即告成功,全程不到三秒。
两分钟把数据倒出来

快照卷创建后,系统会多出一个/dev/centos/mysql_snap20230628设备文件,把它挂载到任意空目录就能像普通分区一样读写:
mkdir /mnt/snap && mount -o nouuid /dev/centos/mysql_snap20230628 /mnt/snap
加nouuid是为了防止XFS报“UUID重复”错。接着用tar整包拖走:
tar --exclude='*.pid' -zcf /backup/mysql_full.tar.gz -C /mnt/snap/var/lib/mysql .
--exclude跳过锁文件,避免恢复时MySQL启动报错。打包完毕,/dev/centos/root里所有数据已定格在创建快照那一刻,哪怕原库继续写入新订单,也影响不了这份tar包。
回滚只要一条合并命令
如果真把表误删,先停业务,把快照卷里的数据直接合并回原卷,速度比重新导入SQL快十倍:
umount /mnt/snap && lvconvert --merge /dev/centos/mysql_snap20230628
合并过程系统会提示“volume will be merged at next activation”,重启后原卷瞬间回到快照点,MySQL直接启动,连配置文件都不用改。若只想单表恢复,也可把快照挂载后单独拷出.ibd文件,用discard/import表空间方式精准还原,对200G大库也能省几小时。
自动清理,别让快照反咬你
快照卷会跟着原卷写入量一起膨胀,忘记删就像定时炸弹。备份完立刻卸掉:
umount /mnt/snap && lvremove -f /dev/centos/mysql_snap20230628
写个shell丢进crontab,每天凌晨创建,五小时后自动删,既保证有份新鲜备份,又把空间占用压到最低。
踩坑合集,提前帮你踩平
1. 快照卷空间耗尽会自动失效,lvdisplay查看Allocatable字段变成0就救不回来;
XFS文件系统挂载快照记得加nouuid,ext4可忽略;
数据库备份前最好FLUSH TABLES WITH READ LOCK一下,让快照里的InnoDB日志保持一致,恢复后不用跑冗长的crash recovery;
如果系统盘是LVM而数据盘不是,把数据盘也转成LVM,快照才能一起管,否则只能裸拷,速度差十倍。
lvcreate建快照→mount挂载→tar打包→lvremove删快照,整套动作120秒搞定。比起rsync整盘对比、 mysqldump锁表等待,LVM快照既不吃业务性能,也不占网络带宽,堪称CentOS7下最省心的本地备份捷径。今晚就给服务器加一道时光机,下次误删库,你也能端着咖啡慢慢回滚。
