这里事先建立好一个逻辑卷,专门存放MySQL初始化数据(即包括我们需要的二进制文件),我只需要对这个逻辑卷某一时刻的状态做快照就可以了。然后把这个快照挂载至一个空的目录下面,把里面的东西拷贝至另个空的目录下面,这个就是我们想要的备份,我们就可以用它来恢复MySQL了。详细的步骤如下:

 
一、为MySQL数据提供存放位置,创建逻辑卷。
 
添加一个分区/dev/sda7,在其上创建物理卷,卷组"myvg" 逻辑卷“mylv”
pvcreate /dev/sda7
vgcreate myvg /dev/sda7
lvcreate -L 500M -n mylv1 myvg
mkdir /mnt/mylv
mount /dev/myvg/mylv1 /mnt/mylv
 
 
二、建立快照(需要开两个终端),因为做快照时候是对表加了读锁的,这就意味着你在建立的过程在别人是不能对表进行写入操作的,所以要快速建立快照,并且快速的解锁。
 
终端1上操作:
[root@dr1 mylv]# mysql
mysql > flush tables with read lock;    
mysql > flush logs;                        
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      107 |              |                  |
+------------------+----------+--------------+------------------+
mysql> 
 
终端2上操作(建立快照):
[root@dr1 ~]# lvcreate -L 100M -n data-snap1 -s -p r /dev/myvg/mylv1
 
终端1上操作:
mysql > unlock tables;
【由上可看出建立快照的时候是在“mysql-bin.000003”位置,马上就能看到效果】
 
第三、拷贝快照。将建立的快照/dev/myvg/data-snap1挂载至目录/mnt/snap1目录下,将其目录下所有的内容复制至一个目录下用作备份,这里复制到/MySQL/data-snap1。
 
[root@dr1 mylv]# mkdir /mnt/snap1
[root@dr1 mylv]# mount /dev/myvg/data-snap1 /mnt/snap1
[root@dr1 mylv]# mkdir /MySQL/data-snap1
[root@dr1 mylv]# cp -pR /mnt/snap1/* /MySQL/data-snap1
 
 
第四、测试恢复,删除掉/mnt/mylv下的所有内容,此时MySQL是肯定无法启动的,然后把快照备份拷贝到此目录下,发现MySQL服务又可以正常的运行了,说明我们的快照备份是可以用于恢复的。
 
[root@dr1 mylv]# pwd
/mnt/mylv
[root@dr1 mylv]# rm -rf ./*
[root@dr1 /]# cp -pR /MySQL/data-snap1/* /mnt/mylv/  
[root@dr1 mylv]# ls
dr1.magedu.com.err  ib_logfile1       mysql-bin.000002  test
dr1.magedu.com.pid  lost+found        mysql-bin.000003
ibdata1             mysql             mysql-bin.index
ib_logfile0         mysql-bin.000001  performance_schema
【看吧!这里的日志也确实是恢复至mysql-bin.000003这个位置啊】
 
第五、我们的备份确实可以用,现在我们卸载掉快照卷,并且移除它。基于快照的备份与恢复就完成了。
 
[root@dr1 /]# umount /dev/myvg/data-snap1
[root@dr1 /]# lvremove /dev/myvg/data-snap1