本次說說熱熱備份數據,上次搭建了pxc的集羣,搭建好了複雜均衡,做了雙機熱備這種方案。無論做前後端分離的項目,還是做微服務的項目,都需要有一個強大穩定的集羣。資料庫備份分為:熱備份和冷備份,如果項目沒有上線冷備份沒問題。如果上線用冷備份就有問題。源碼:https://github.com/limingios/netFuture/tree/master/mysql-pxc/
先讓其中的一個PXC下線,然後通過拷貝數據文件的方式完成備份,備份完畢下線的PXC上線,完整於其他節點的自動同步。
是一款基於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
原來的容器全部刪除
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腳本的,更加方便了。