MySQL數據庫運維之數據備份03

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

相關文章
相關標籤/搜索