1. 程式人生 > >docker環境下MYSQL PXC叢集熱備份和還原

docker環境下MYSQL PXC叢集熱備份和還原

之前搭建了在docker上搭建了一套MySQL的PXC叢集,當時沒有做備份處理,今天搭建了一套備份方案。

MySQL的資料備份方式有很多種,如自帶的MySQLDUMP命令,或者直接拷貝資料檔案等等方式,但是這些方式都是系統的冷備份,即需要停機服務進行備份,這種方式我沒有采用。

本次備份方案是熱備份,MySQL的熱備份的方式有兩種:1、LVM 2、xtrabackup

lvm是Linux自帶的一種,通過對某一個分割槽建立快照進行備份,所以可以備份多種資料庫。但是缺點是會對資料庫加鎖,使得資料庫在備份區間只讀不可寫,生產環境這是不允許的。

xtrabackup是percona公司的開源免費的MySQL備份工具,在熱備份上不需要鎖表進行備份,所以一般MySQL上備份採用xtrabackup,它還有個優勢是備份資料是被壓縮過的,會減小磁碟壓力。

 

備份方式兩種:全量、增量,一般一週一次全量備份,一天一次增量備份。

由於PXC安裝在docker上的,備份方式和單機備份有一些差異:

1、備份資料docker服務上需要有資料卷對映到MySQL-PXC的backup備份資料夾。具體在搭建pxc筆記中有。

2、要進入docker中MySQL上安裝xtrabackup進行資料備份,不是在宿主機上安裝

 

由於PXC各個節點資料節點都是一致的,所以只需要進入一個節點進行備份就行了。

方法:

進入節點
docker exec -it node2 /bin/bash

更新update
apt-get update

如果執行這一步update時候報錯,如以下錯誤:

E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

這代表進入這個node2服務中的時候沒有許可權操作,所以我們要給到root使用者進入服務

方式:

退出當前服務
ctrl+d

重新以root角色進入docker服務,隨便進入一個節點,這裡我進入node1
docker exec -it -u 0 node1 /bin/bash

執行update更新
apt-get update

安裝xtrabackup
apt-get install percona-xtrabackup-24

安裝完後進行全量備份:
innobackupex --user=root --password=MySQL密碼 /data/backup/full

執行完後自動開始全量備份

檢查全量備份:

切換到全量備份資料夾
cd /data/backup/full

檢視
ls

退出docker服務,由於有目錄對映,所以宿主機上也會看到檔案,具體方法:

檢視宿主機備份的資料目錄在哪:
docker inspect backup

切換到該資料夾
cd /var/lib/docker/volumes/backup/_data

檢視
ls

發現有backup目錄,進入backup目錄裡面的full目錄中檢視,發現有全量備份檔案

全量備份完成。

 

還原:

MySQL的資料還原方式不像備份一樣,MySQL資料還原只有冷還原,docker服務和單機節點差異是,docker還原的時候需要把docker的PXC叢集解散掉,刪除各個節點,之後新建一個新的節點並 進行冷還原,最後新建其他節點和當前節點進行資料同步;

docker stop掉各個節點

docker rm刪掉各個節點

docker volume rm刪掉各個資料卷,這裡刪掉的是pxc服務的資料卷不是backup備份檔案資料卷,千萬別用刪除孤卷命令,因為解散pxc後backup卷也是孤捲了,刪除孤卷命令會把備份資料也刪掉了

新建一個新節點,命令和搭建pxc叢集一致


進入該節點
docker exec -it -u 0 node1 bash

安裝xtrabackup

執行MySQL資料清空指令
rm -rf /var/lib/mysql/*

執行還原命令
innodackupex --user=root --password=密碼 --apply-back /data/backup/full/備份檔名/

這裡的--apply-back引數指的是回滾掉全量備份之間產生的事務差異資料

 

退出容器,重啟docker節點

之後在搭建其他的節點即完成冷還原