LVM快照备份数据
LVM快照属于几乎热备,因为要先请求全局锁,而后创建快照,并在创建快照完成后释放全局锁,无法做到增量备份,并且数据目录必须在LVM逻辑卷上存放。
一、创建一个逻辑卷并挂载使用
1)先创建两个主分区类型为8e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) |
1 2 3 4 |
$ partprobe $ cat /proc/partitions | grep sdb 8 16 20971520 sdb 8 17 5253223 sdb1 |
2)创建物理卷
1 |
$ pvcreate /dev/sdb1 |
3)创建卷组,组名vg
1 |
$ vgcreate vg /dev/sdb1 |
4)创建逻辑卷,卷名lv,大小2G
1 |
$ lvcreate -L +2G -n lv vg |
5)格式化逻辑卷
1 |
$ mkfs -t ext4 /dev/vg/lv |
6)挂载逻辑卷
1 2 3 4 |
$ mkdir /mydata $ mount /dev/vg/lv /mydata $ df -H | grep /mydata /dev/mapper/vg-lv 2.2G 71M 2.0G 4% /mnt |
7)自动挂载逻辑卷(/etc/fstab文件中添加一行)
1 |
/dev/vg/lv /mydata ext4 defaults 0 2 |
二、编译安装MySQL5.6
详情请看“MySQL5.6多方式安装”章节,主要是把MySQL的数据目录定义为/mydata目录,因为只有MySQL数据目录在逻辑卷上,做LVM快照才有意义。
三、LVM上创建快照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 锁表; mysql> flush tables with read lock; # 滚动二进制日志; mysql> flush logs; # 记录当前二进制日志文件以及位置; $ mysql -e 'show master status;' > /tmp/master-info # LVM上创建快照卷; $ lvcreate -L 100M -s -p r -n db-snap /dev/vg/lv # 解锁; mysql> unlock tables; # 挂载快照卷,并复制/mnt下的数据,然后删除快照卷; $ mount -o or /dev/vg/db-snap /mnt |
PS:做MySQL数据恢复的话,可以停机把备份的数据库直接复制到数据目录下,然后也可以根据二进制日志文件来进行完整备份后改动的数据(可以参考Mysqldump数据恢复部分)。
Mysqlbinlog工具处理二进制日志
1 2 3 4 5 6 7 8 |
# 查看二进制日志; $ mysqlbinlog /mydata/mysql-bin.00001 > root.sql # 指定开始时间并开始查看; $ mysqlbinlog --start-datetime='2014-03-24 15:23:45' mysql-bin.00002 # 指定开始文件并开始查看; $ mysqlbinlog --start-position=177 --stop-position=358 mysql-bin.00002 |
PS:这里的mysql-bin.00002是完整备份后数据改动记录的第一个二进制日志文件,这里只恢复了一个因为数据较少,如果增量数据量大的话,后面的所有日志文件也同样要提取出来进行恢复。