前提:LVM是在LV的基础上建立,要求你的数据库必须在逻辑卷这个分区上,否则没有用。
当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。
快照原理
当我们对一个数据库创建一个快照时,仅仅备份的是原始卷里数据的元数据,而在我们创建快照的时候会生成一个对应的原始卷位示图,记录原始卷的数据变化。
原始卷进行写操作
1.先查看位示图看对应数据页是否已被使用,如果没有使用,则先把数据页里面的原始数据拷贝到对应的快照卷的位置。
2.位示图对应数据页位置置为1(表示已经修改数据)
3.可以直接修改数据
读取快照内容
先看位示图中对应数据页是否已被置位,如果已被置位,则读取快照卷的数据。否则根据对应的地址来读取原始卷的数据
示意图
快照备份步骤
1.对数据库加全局读锁(防止创建快照过程中有数据写入)
flush tables with read lock;
2.创建快照
lvcreate -L 500M -s -n snap-lv /dev/myvg/mylv
注意:由于快照是从卷组中获取存储空间你,要求卷组中必须有可用的空间,/dev/myvg/mylv是指对这个逻辑卷进行快照。而快照snap-lv是在/dev/myvg的目录下面
3.创建快照之后立马释放锁
unlock tables; #释放锁
4.挂载快照设备,并对数据库中的文件和目录进行打包压缩
由于是复制原始卷的元数据,所以不用格式化了,原始卷已经是ext4的文件系统。
mount /dev/myvg/snap-lv /mnt #/mnt 最好是空目录
tar -zcvf /data/back/mysql.tar.gz /mnt/* #打包,在打包过程中对数据进行拷贝备份
5.备份之后,立马卸载快照防止达到快照空间,使快照失效。严重时破坏原始卷。
umount /mnt #卸载设备
6.移除快照设备。
lvremove -f /dev/myvg/snap-lv