本次說說熱熱備份數據,上次搭建了pxc的集羣,搭建好了複雜均衡,做了雙機熱備這種方案。無論做前後端分離的項目,還是做微服務的項目,都需要有一個強大穩定的集羣。資料庫備份分為:熱備份和冷備份,如果項目沒有上線冷備份沒問題。如果上線用冷備份就有問題。源碼:github.com/limingios/ne

冷備份

  1. 冷備份是關閉資料庫時候的備份方式,通常做法是拷貝數據文件
  2. 冷備份是最簡單最安全的一種備份方式
  3. 大型網站無法做到關閉業務備份數據,所以冷備份不是最佳選擇
  • PXC冷備份方案

先讓其中的一個PXC下線,然後通過拷貝數據文件的方式完成備份,備份完畢下線的PXC上線,完整於其他節點的自動同步。

熱備份

  1. 熱備份是在系統運行的狀態下備份數據,也是難度最大的備份。舉個例子,如果淘寶下線1個小時備份數據,淘寶損失多少錢,誰受的的了啊。這都是白花花的銀子啊。
  2. Mysql常用的熱備份有LVM和XtraBackup兩種方案。LVM是針對的分區備份,針對linux系統下的,他號稱任何一種資料庫都可以完成備份,但是有個弊端,就是在備份的時候只能讀不能寫入。
  3. 建議使用XtrBackup熱備Mysql,不需要鎖,備份的時候即可讀也可以寫,XtraBackup而且還是免費的。

XtrBackup

是一款基於InnoDB的在線熱備工具,具有開源免費的,支持在線熱備,佔用磁碟空間小,能夠非常快速的備份與恢復mysql資料庫。它支持mysql的各種衍生版本。

  • XtraBackup優勢
  1. 備份過程不鎖表,快速可靠
  2. 備份過程不會打斷正在執行的事務
  3. 能夠基於壓縮等功能節約磁碟空間和流量
  • 全量備份和增量備份
  1. 全量備份是備份全部數據,備份過程時間,佔用空間大。
  2. 增量備份是隻備份變化的那部分數據。備份時間短。佔用空間小。

在正常的生產系統上,一般是一週做一次全量的備份,一週做一次增量的備份。就足夠了。

XtraBackup 安裝

  • 準備工作

這個工具要求在資料庫的節點之內。備份的出來的數據就直接。需要創建一個數據卷,他用來備份XtraBackup 產生的文件,然後映射到宿主機的磁碟裡面。

創建數據卷

docker volume create backup

停止其中一個節點,這裡選擇node1,目的就是為了刪除node1,增加新創建的數據卷。已經運行的容器是不可以增加新的數據卷的。只要還掛載v1的數據卷,v1的文件並沒有刪除,所以數據不會丟失。

docker stop node1
docker rm node1

重新安裝node1 掛載新的節點,並同步其他4個節點。 --CLUSTER_JONIN=node2 新創建的node1,同步node2節點。

docker run -d -p 3306:3306 --net=net1 --name=node1
-e CLUSTER_NAME=PXC
-e MYSQL_ROOT_PASSWORD=a123456
-e XTRABACKUP_PASSWORD=a123456
-v v1:/var/lib/mysql
--privileged
--ip 172.18.0.2
-v backup:/data
-e CLUSTER_JOIN=node2
percona/percona-xtradb-cluster

  • PXC 全量備份數據

PXC容器中安全XtraBackup,並執行備份,後悔啊當初PXC的時候沒直接找個帶XtraBackup的鏡像。

docker exec -it --user root node1
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null
apt-get clean
apt-get update
apt-get install vim
vi /etc/apt/sources.list

sources.list 添加下面的內容

deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted

apt-get clean
apt-get update
apt-get install percona-xtrabackup-24

全量備份的命令

出現completed OK!說明備份完畢。

innobackupex --user=root --password=a123456 /data/backup/full

PXC 全量恢復步驟

  1. 資料庫可以熱備份,但是不能熱還原。為了避免恢復過程中的數據同步,我們採用空白的mysql還原數據,然後再建立PXC集羣的方式。所以在開發中一定要注意許可權問題,不要給開發人員root用戶。
  2. 還原數據前要將未提交的事務回滾,還原數據之後重啟!
  • 執行代碼

原來的容器全部刪除

docker stop node1 node2 node3 node4 node5
docker rm node1 node2 node3 node4 node5
docker volume rm v1 v2 v3 v4 v5
docker volume create v1

創建node1 和數據卷

docker volume create v1
docker run -d -p 3306:3306 --net=net1 --name=node1
-e CLUSTER_NAME=PXC
-e MYSQL_ROOT_PASSWORD=a123456
-e XTRABACKUP_PASSWORD=a123456
-v v1:/var/lib/mysql
--privileged
--ip 172.18.0.2
-v backup:/data
percona/percona-xtradb-cluster

進入容器內還原資料庫

#root用戶登錄
docker exec -it --user root node1 bash
#刪除數據
rm -rf /var/lib/mysql/*
#沒有提交的數據回滾
innobackupex --user=root --password=a123456 --apply-back /data/backup/full/2018-12-06_17-18-19/
#執行下冷還原
innobackupex --user=root --password=a123456 --copy-back /data/backup/full/2018-12-06_17-18-19/
chown -R mysql:mysql /var/lib/mysql/

退出容器重啟下,node1節點

docker stop node1
docker start node1

PS:資料庫的熱備份,冷還原也講完了,真心感覺也不是那麼複雜。其實就是這樣,但是在雲平臺越來越盛行的今天,基本上買個rdrs資料庫這些功能都有了。瞭解下XtraBackup 這個工具確定很重要晚上很多的寫成shell腳本的,更加方便了。


推薦閱讀:
相關文章