本次說說熱熱備份數據,上次搭建了pxc的集羣,搭建好了複雜均衡,作了雙機熱備這種方案。不管作先後端分離的項目,仍是作微服務的項目,都須要有一個強大穩定的集羣。數據庫備份分爲:熱備份和冷備份,若是項目沒有上線冷備份沒問題。若是上線用冷備份就有問題。源碼:
github.com/limingios/n…
冷備份
-
冷備份是關閉數據庫時候的備份方式,一般作法是拷貝數據文件
-
冷備份是最簡單最安全的一種備份方式
-
大型網站沒法作到關閉業務備份數據,因此冷備份不是最佳選擇
先讓其中的一個PXC下線,而後經過拷貝數據文件的方式完成備份,備份完畢下線的PXC上線,完整於其餘節點的自動同步。
熱備份
-
熱備份是在系統運行的狀態下備份數據,也是難度最大的備份。舉個例子,若是淘寶下線1個小時備份數據,淘寶損失多少錢,誰受的的了啊。這都是白花花的銀子啊。
-
Mysql經常使用的熱備份有LVM和XtraBackup兩種方案。LVM是針對的分區備份,針對linux系統下的,他號稱任何一種數據庫均可以完成備份,可是有個弊端,就是在備份的時候只能讀不能寫入。
-
建議使用XtrBackup熱備Mysql,不須要鎖,備份的時候便可讀也能夠寫,XtraBackup並且仍是免費的。
XtrBackup
是一款基於InnoDB的在線熱備工具,具備開源免費的,支持在線熱備,佔用磁盤空間小,可以很是快速的備份與恢復mysql數據庫。它支持mysql的各類衍生版本。
-
備份過程不鎖表,快速可靠
-
備份過程不會打斷正在執行的事務
-
可以基於壓縮等功能節約磁盤空間和流量
-
全量備份是備份所有數據,備份過程時間,佔用空間大。
-
增量備份是隻備份變化的那部分數據。備份時間短。佔用空間小。
在正常的生產系統上,通常是一週作一次全量的備份,一週作一次增量的備份。就足夠了。
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容器中安全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 全量恢復步驟
-
數據庫能夠熱備份,可是不能熱還原。爲了不恢復過程當中的數據同步,咱們採用空白的mysql還原數據,而後再創建PXC集羣的方式。因此在開發中必定要注意權限問題,不要給開發人員root用戶。
-
還原數據前要將未提交的事務回滾,還原數據以後重啓!
原來的容器所有刪除
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複製代碼
進入容器內還原數據庫
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腳本的,更加方便了。