LVM快照备份数据
LVM快照属于几乎热备,因为要先请求全局锁,而后创建快照,并在创建快照完成后释放全局锁,无法做到增量备份,并且数据目录必须在LVM逻辑卷上存放。
一、创建一个逻辑卷并挂载使用
1)先创建两个主分区类型为8e
$ 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
5
6
7
8
9
10
11
12
13
14
15
$fdisk/dev/sdb
Command(mforhelp): n
Commandaction
e extended
p primarypartition(1-4)
p
Partitionnumber(1-4): 1
Firstcylinder(1-2610,default1):
Usingdefaultvalue1
Lastcylinder,+cylindersor+size{K,M,G}(1-2610,default2610): +5G
Command(mforhelp): t
Partitionnumber(1-4): 1
Hexcode(typeLtolistcodes): 8e
Changedsystemtypeofpartition1to8e(LinuxLVM)
$ partprobe
$ cat /proc/partitions | grep sdb
8 16 20971520 sdb
8 17 5253223 sdb1
1
2
3
4
$partprobe
$cat/proc/partitions|grepsdb
8 16 20971520sdb
8 17 5253223sdb1
2)创建物理卷
$ pvcreate /dev/sdb1
1
$pvcreate/dev/sdb1
3)创建卷组,组名vg
$ vgcreate vg /dev/sdb1
1
$vgcreatevg/dev/sdb1
4)创建逻辑卷,卷名lv,大小2G
$ lvcreate -L +2G -n lv vg
1
$lvcreate-L+2G-nlvvg
5)格式化逻辑卷
$ mkfs -t ext4 /dev/vg/lv
1
$mkfs-text4/dev/vg/lv
6)挂载逻辑卷
$ mkdir /mydata
$ mount /dev/vg/lv /mydata
$ df -H | grep /mydata
/dev/mapper/vg-lv 2.2G 71M 2.0G 4% /mnt
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文件中添加一行)
/dev/vg/lv /mydata ext4 defaults 0 2
1
/dev/vg/lv /mydata ext4 defaults 02
二、编译安装MySQL5.6
详情请看“MySQL5.6多方式安装”章节,主要是把MySQL的数据目录定义为/mydata目录,因为只有MySQL数据目录在逻辑卷上,做LVM快照才有意义。
三、LVM上创建快照
# 锁表;
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 锁表;
mysql>flushtableswithreadlock;
# 滚动二进制日志;
mysql>flushlogs;
# 记录当前二进制日志文件以及位置;
$mysql-e'show master status;'>/tmp/master-info
# LVM上创建快照卷;
$lvcreate-L100M-s-pr-ndb-snap/dev/vg/lv
# 解锁;
mysql>unlocktables;
# 挂载快照卷,并复制/mnt下的数据,然后删除快照卷;
$mount-oor/dev/vg/db-snap/mnt
PS:做MySQL数据恢复的话,可以停机把备份的数据库直接复制到数据目录下,然后也可以根据二进制日志文件来进行完整备份后改动的数据(可以参考Mysqldump数据恢复部分)。
Mysqlbinlog工具处理二进制日志
# 查看二进制日志;
$ 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
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=358mysql-bin.00002
PS:这里的mysql-bin.00002是完整备份后数据改动记录的第一个二进制日志文件,这里只恢复了一个因为数据较少,如果增量数据量大的话,后面的所有日志文件也同样要提取出来进行恢复。
如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。