通过LVM快照可以快速的备份数据,相比传统的复制粘贴数据到其他分区来讲,快照的优势除了速度快之外还可以不受磁盘数据动态变化的影响,它直接保存一个分区当时状态的元数据。但是有一个要求就是MySQL数据所在分区需要是逻辑卷分区,否则需要先将数据迁移到逻辑卷分区上再进行备份操作,下面是一个完整的迁移数据与备份流程:
一、准备好磁盘并创建LVM快照:
vgcreate mysql_vg /dev/sdb
lvcreate -L 20G -n mysql_lv mysql_vg
lvscan
2、将数据迁移到逻辑卷中
systemctl stop mysqld
mkfs.xfs /dev/mysql_vg/mysql_lv
mount /dev/mysql_vg/mysql_lv /mnt/ #将逻辑卷进行临时挂载
cp -a /var/lib/mysql/* /mnt #拷贝所有数据到新的逻辑卷分区中
umount /mnt #取消临时挂载
echo "/dev/mysql_vg/mysql_lv /var/lib/mysql xfs defaults 0 0" > /etc/fstab #将已有数据的逻辑卷永久挂载
mount -a
systemctl start mysqld
3、为数据库加全局读锁,然后给逻辑卷建立快照,建立快照会占用卷组的空间,通常给快照设置和逻辑卷一样大,避免快照生命周期太快。
mysql > flush tables with read lock; #该终端不要退出,需另启终端执行后面的命令,最后再退出会话自动解锁
lvcreate -s -n mysql_snap -L 1G /dev/mysql_vg/mysql_lv
4、通过lvdisplay可以发现多了一个逻辑卷,这个就是一个快照卷。其中“Allocated to snapshot”和生命周期有关,lvm快照遵循写时复制的原理,会随着逻辑卷本身的不断写入而增多,当达到100%后快照会自我销毁。所以如果快照空间小于逻辑卷的话,逻辑卷可能还没写多少数据就达到了生命周期,这也是为什么第一步里说大小最好一致。
使用快照还原数据方法一:
1、首先删除逻辑卷上的数据以便测试
2、挂载快照到一个新建立的目录,进入目录后就可以看到之前给逻辑卷建立快照时上面的数据,然后把这些数据复制到逻辑卷上就可以了(如果逻辑卷是xfs格式需要先卸载掉逻辑卷后再挂载快照,ext格式的话则可以直接挂载)
使用快照还原数据方法二:
lvconvert --merge /dev/myvg/mysnap #merge自动合并快照和逻辑卷,合并前需要先卸载逻辑卷分区和快照分区。合并后会看到合并进度,并且lvdisplay后发现多的那个逻辑卷已经不存在了