上篇文章介紹了一下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的二進制日誌介紹數據的全量和增量恢復,歡迎評論轉發!