docker簡易實現熱備份資料庫資料
docker簡易實現熱備份資料庫資料
寫在前面:冷備份是關閉資料庫時候的備份方式,通常做法是拷貝資料檔案。但大型網站無法做到關閉業務備份資料,所以冷備份是不是最佳選擇,故選擇熱備份。當然通過pxc叢集,讀者可以先關閉其中一個節點進行備份,而後重新開啟加入叢集,自然叢集資料再次進行同步。MySQL常見的熱備份有LVM和XtraBackup兩種。但由於當LVM在備份時鎖表只能讀取不能寫入。
XtraBackup備份不鎖表,不會打斷正在執行的食物,能夠壓縮等功能節約磁碟空間和流量。可採取增量備份、全量備份。
第一步 建立docker卷
在centos視窗中,執行如下命令:
docker volume create backup
第二部 對映docker卷
這裡選取第一個節點 進行資料備份,讀者可自行選擇節點將備份卷對映到容器中重新建立即可。
首先將node1節點停止 刪除。由於一開始並沒有將備份的docker卷對映其中,故重新建立改node1容器。
在centos視窗中,執行如下命令:
docker stop node1
docker rm node1
docker run -d -p 3306:3306 -v v1:/var/lib/mysql -v backup:/data -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node1 --net=net2 --ip 172.18.0.2 pxc
注: -v backup:/data | 將備份docker捲進行對映
-e CLUSTER_JOIN=node2 | 選擇同步的節點,選擇其他某個節點進行資料同步
第三步 PXC全量備份
在PXC容器中安裝XtraBackup,並執行備份。在pxc容器node1中,執行如下命令:
apt-get update
apt-get install percona-xtrabackup-24
innobackupex --user=root --password=123456 /data/backup/full
執行後進行對應目錄進行檢視,如下所示:
[email protected]6596a013857c:/# cd /data/backup/full/2018-07-02_06-32-52/
[email protected]6596a013857c:/data/backup/full/2018-07-02_06-32-52# ls
backup-my.cnf ib_buffer_pool ibdata1 mysql performance_schema sys xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_info xtrabackup_logfile
第四步 驗證是否全量備份成功,進行PXC全量恢復
資料庫可以熱備份,但不能熱還原。為了避免恢復過程中的資料同步,我們採用空白的MySQL還原資料,然後再建立PXC叢集。請讀者自行實現。這裡我們主要實現冷備份資料。
首先先停止其餘節點容器(node2,node3,node4)並刪除容器以及對應的docker卷。在centos視窗中,執行如下命令:
docker stop node2 node3 node4
docker rm node2 node3 node4
docker volume rm v2 v3 v4
進入node1容器中,刪除資料,回滾事務,恢復資料,重啟資料庫服務。執行如下命令:
docker exec -it node1 bash
rm -rf /var/lib/mysql/*
innobackupex --user=root --password=abc123456 --apply-back /data/backup/full/2018-07-02_07-29-54/
innobackupex --user=root --password=123456 --copy-back /data/backup/full/2018-07-02_07-29-54/
service mysql stop
service mysql start
注:還原資料前要將未提交的事務進行回滾,還原資料之後重啟MySQL
第五步 連線到node1資料庫,檢視資料是否恢復。
資料庫連線資訊如下:
資料庫ip地址(192.168.9.144 )---宿主機ip 埠 3306 使用者 root 密碼 123456
連線上資料庫檢視資料是否還原成功。成功後重新建立叢集,具體步驟請參考《docker簡易搭建MySQL叢集》*https://blog.csdn.net/belonghuang157405/article/details/80774506。