数据库备份有多种方法,今天介绍下使用lvm的快照功能完成对mysql数据库的备份。lvm在对数据进行备份的时候可以提供近乎热备的方式,它的工作机制是这样的:在某一时刻对数据库所在目录创建快照卷,由此,通过快照卷访问的数据就是保存快照那一刻时的数据,而后将快照卷中的数据拷贝至其他目录即可,之所以称他为近乎热备是因为在创建快照的时候需要对数据库施加读锁,在这期间数据库不能进行写操作。

使用lvm备份数据库的前提

 1,数据文件必须在lv中

 2,此逻辑卷所在的卷组必须有足够的空间使用快照卷 

 3, 数据文件和事务日志要在同一个逻辑卷上


这里以数据库mytest为例实现备份

mysql> use mytest;
mysql> show tables;   
+------------------+
| Tables_in_mytest |
+------------------+
| students         | 
+------------------+
1 row in set (0.00 sec)
mysql> select * from students;
+----+-------+-----+--------+
| id | Name  | Age | Gender |
+----+-------+-----+--------+
|  1 | Tom   |  20 | M      | 
|  2 | Jerry |  23 | F      | 
|  3 | Sara  |  19 | F      | 
+----+-------+-----+--------+
3 rows in set (0.09 sec)

操作步骤:

1,打开mysql会话,施加读锁,滚动二进制日志

mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;

2,通过另一个终端,保存二进制日志文件及相关位置信息

# mysql -uroot -p -e "SHOW MASTER STATUS\G" > /backup/master-`date +%F`.info

3.创建快照卷

# lvcreate -L 30M -s -p r -n mydata-snap /dev/vg_root/mydata

4,释放锁

mysql> UNLOCK TABLES;

5,挂载快照卷,开始备份

# mkdir /mnt/snap
# mount /dev/vg_root/mydata-snap /mnt/snap -o ro
# mkdir /backup/full-backup-`date +%F`
# cp -a /mnt/snap/data/* /backup/full-backup-2015-09-20/
# cd /backup/full-backup-2015-09-20/
# rm -f mysql-bin.*   # 完全备份后,二进制日志可以删除

6,卸载快照卷并删除

# cd 
# umount /mnt/snap
# lvremove --force /dev/vg_root/mydata-snap

7,增量备份二进制日志

 # mysqlbinlog  --start-datetime="2015-09-20 11:34:57" mysql-bin.000026 mysql-bin.000027 > /backup/increment-`date +%F-%H-%M-%S`.sql

至此,基于lvm快照备份数据库已完成