上篇文章介绍了一下MySQL的数据备份与恢复第二部份内容,即便用Xtrabackup完成MySQL数据库的物理备份与恢复,可是Xtrabackup主要是针对于InnoDB表引擎格式的备份,其余存储引擎并不适用。本篇文章将介绍使用LVM完成MySQL的数据备份和恢复!
1、LVM简单介绍mysql
一、定义
LVM,全称为:Logical Volume Manager。意思是逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制。早期的磁盘分区在分完区以后没法改变分区的大小,可是一般使用磁盘以前又不能对须要的磁盘容量进行准确评估,可能会形成磁盘不够用或者磁盘浪费等问题,而LVM能够动态建立和修改磁盘大小,能够有效地解决这个问题。sql
二、重要概念
(1)PV(Physical Volume):表示物理卷,在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区;
(2)VG(Volume Group):表示卷组,创建在物理卷上,一个卷组中至少要包括一个物理卷,卷组创建后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组;
(3)LV(Logical Volume):逻辑卷创建在卷组基础上,卷组中未分配空间可用于创建新的逻辑卷,逻辑卷创建后能够动态扩展和缩小空间;
(4)PE(Physical Extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在创建卷组时指定,一旦肯定不能更改,同一卷组全部物理卷的物理区域大小需一致,新的PV加入到VG后,PE的大小自动更改成VG中定义的PE大小;
(5)LE(Logical Extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小;数据库
更多内容能够参考工具书《鸟哥的Linux私房菜》,里面有详细介绍。vim
三、各部分组成结构app
2、建立逻辑卷并备份
一、备份前提
(1)待备份的MySQL数据必须在在逻辑卷上
(2)若是是InnoDB存储引擎表,为了保证备份以后的数据一致性,须要事务日志和数据都在同一个卷上,由于同一时刻只能对一个逻辑卷作快照工具
二、备份过程
(1)首先须要准备一块磁盘或者一个分区,此处演示使用VMware新加磁盘的办法,首先关闭Vmware,具体操做过程以下spa
到此,磁盘添加完毕,启动Vmware虚拟机。
(2)使用以下命令查看新添加的磁盘操作系统
[root@WB-BLOG ~]# fdisk -l
(3)使用刚才添加的磁盘来建立物理卷3d
[root@WB-BLOG ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created #查看建立的物理卷 [root@WB-BLOG ~]# pvdisplay "/dev/sdb" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb ...
(4)根据物理卷来建立卷组日志
[root@WB-BLOG ~]# vgcreate mygroup /dev/sdb Volume group "mygroup" successfully created 参数解释: mygroup:表示卷组的名称 /dev/sdb:表示使用哪一个物理卷来建立卷组 #查看建立的卷组 [root@WB-BLOG ~]# vgdisplay --- Volume group --- VG Name mygroup ...
(5)根据上一步建立的卷组来建立逻辑卷
[root@WB-BLOG ~]# lvcreate -n mysqldata --size 3G mygroup Logical volume "mysqldata" created. 参数解释: -n:表示要建立的逻辑卷的名称 --size:表示要建立的逻辑卷的大小 mygroup:表示使用哪一个卷组来建立逻辑卷 #查看建立的逻辑卷 [root@WB-BLOG ~]# lvdisplay --- Logical volume --- LV Path /dev/mygroup/mysqldata LV Name mysqldata VG Name mygroup LV UUID qHJyK4-eMUF-gQku-ojkC-j7Tr-hayA-UFsq5J
(6)格式化刚才建立的逻辑卷,建立完逻辑卷以后,逻辑卷的默认磁盘路径为/dev/卷组名称/逻辑卷名称,经过lvdisplay命令输出结果中的"LV Path"也能够看到
[root@WB-BLOG ~]# mkfs.ext4 /dev/mygroup/mysqldata
(7)挂载逻辑卷到一个目录上
#使用blkid查看设备的UUID编号 [root@WB-BLOG ~]# blkid /dev/mygroup/mysqldata /dev/mygroup/mysqldata: UUID="46483472-1c46-4af5-8844-d39fd653d57d" TYPE="ext4" #上述输出的UUID为设备的UUID号,可使用该ID编号将这个逻辑卷挂载到某个目录上 [root@WB-BLOG ~]# mkdir -pv /mnt/ [root@WB-BLOG ~]# vim /etc/fstab #在末尾加入以下一行,表示将UUID为4648...的逻辑卷设备挂载到/mnt目录,而后保存退出 UUID="46483472-1c46-4af5-8844-d39fd653d57d" /mnt ext4 defaults 0 0 #让操做系统读取fstab文件内容,并重新执行挂载 [root@WB-BLOG ~]# mount -a #查看逻辑卷是否挂载成功,看到以下一行表示挂载成功 [root@WB-BLOG ~]# df -h /dev/mapper/mygroup-mysqldata 2.9G 4.5M 2.8G 1% /mnt
(8)在/mnt目录下建立MySQL的数据目录data
[root@WB-BLOG ~]# mkdir -pv /mnt/mydata/data/
(9)修改MySQL配置文件和启动脚本中的datadir目录和binlog日志路径到data目录下
[root@WB-BLOG ~]# vim /etc/my.cnf #修改以下内容 datadir = /mnt/mydata/data log_bin = /mnt/mydata/data/mysql-bin binlog_format = mixed log_bin_index = /mnt/mydata/data/mysql-bin-index ... [root@WB-BLOG ~]# vim /etc/init.d/mysqld #修改以下内容 datadir=/mnt/mydata/data ...
(10)受权,并从新初始化MySQL数据库到/mnt/mydata/data目录下
[root@WB-BLOG ~]# chown -R mysql:mysql /mnt/mydata/data/ [root@WB-BLOG ~]# cd /usr/local/mysql-5.6.39/scripts/ [root@WB-BLOG scripts]# ./mysql_install_db --user=mysql --group=mysql --datadir=/mnt/mydata/data/ --basedir=/usr/local/mysql-5.6.39
(11)启动数据库,查看是否正常
[root@WB-BLOG scripts]# service mysqld start
至此,MySQL的数据目录已经在LVM逻辑卷上。
(12)假如实例已经使用了一段时间,新的数据已经在LVM逻辑卷中了,如今须要备份。则能够经过建立逻辑卷快照完成MySQL的数据备份
[root@WB-BLOG scripts]# lvcreate --snapshot /dev/mygroup/mysqldata -n data-snap --size 1G --permission r Logical volume "data-snap" created. #以上命令表示使用/dev/mygroup/mysqldata逻辑卷建立了一个名称为data-snap大小为1G的只读快照 参数解释: --snapshot:表示建立逻辑卷快照 -n:指定快照名称 --size:指定快照的大小 --permission:指定快照对使用者的操做权限,上述权限为只读 #查看是否备份成功,须要将这个快照卷挂载到某个目录上查看 [root@WB-BLOG scripts]# mount /dev/mygroup/mysqldata /tmp/ [root@WB-BLOG scripts]# ls /tmp/mydata/data/
(13)备份完成以后,能够将备份的数据打包压缩,而后移除逻辑卷快照
#打包数据 [root@WB-BLOG scripts]# tar zcvf mysql_data_`date +%F`.tar.gz /tmp/mydata/data/ #移除逻辑卷快照,可使用lvdisplay命令查看到刚才建立的逻辑卷快照的名称 [root@WB-BLOG scripts]# lvremove /dev/mygroup/data-snap Do you really want to remove active logical volume data-snap? [y/n]: y Logical volume "data-snap" successfully removed
(14)数据恢复,使用刚才打包的备份文件完成数据的恢复
#模拟数据丢失(删库!注意千万不要正式环境尝试...) [root@WB-BLOG scripts]# rm -rf /mnt/mydata/data/* #中止mysqld进程 [root@WB-BLOG scripts]# killall mysqld [root@WB-BLOG scripts]# tar xf mysql_data_2018-05-30.tar.gz #移动数据并受权 [root@WB-BLOG scripts]# mv tmp/mydata/data/* /mnt/mydata/data/ [root@WB-BLOG scripts]# chown -R mysql:mysql /mnt/mydata/data/ #启动数据库 [root@WB-BLOG scripts]# service mysqld start
(15)登陆以后检查数据是否还原
后续文章将更新在我的小站上,欢迎查看。
至此,基于LVM的MySQL数据备份与恢复介绍完毕,下片文章开始将结合MySQL的二进制日志介绍数据的全量和增量恢复,欢迎评论转发!