docker mysql數據備份xtrabackup


一、概述

線上有一個mysql,是在docker里面運行的。

關於docker封裝mysql鏡像,請參考鏈接:https://www.cnblogs.com/xiao987334176/p/11984692.html

 

為了避免數據丟失,需要做數據備份,但是不能影響mysql運行。所以這里采用xtrabackup

xtrabackup介紹

對於MySQL數據庫的熱備,xtrabackup是除了MySQL enterprise backup之外的不二之選。該工具提供了基於innodb存儲引擎的熱備,支持全量,增量備份,部分備份,時點恢復以及使用xtrabackup備份來重做slave等。xtrabackup工具包包含一個innobackupex命令行工具,同時支持InnoDB引擎以及MyISAM引擎。本文主要描述的是trabackup的備份原理並給出了相關演示。

 

xtrabackup工作原理

InnoDB引擎很大程度上與Oracle類似,使用redo,undo機制,因此在熱備期間需要考慮對於日志緩沖區在線事物日志及時寫出到文件的問題。如果log buffer沒有及時寫出將被日志的循環寫特性覆蓋。xtrabackup在啟動時會記住log sequence number(LSN),然后一頁一頁地復制InnoDB的數據。與此同時,監控log buffer中的日志情況,一旦log buffer發生變化,即數據發生了不一致,該過程會立即被捕獲並把變化的頁面復制到xtrabckup log,直到全部innoDB數據文件復制完成之后,停止監控log buffer及日志復制。
    xtrabackup在恢復期間對提交的事務前滾,未提交或失敗的事務進行回滾,從而保證數據的一致性。因此對於InnoDB表在備份期間不會鎖表。由於XtraBackup其內置的InnoDB庫打開文件的時候是rw的,所以運行XtraBackup的用戶,必須對InnoDB的數據文件具有讀寫權限。

 

extrabackup的備份步驟

 

二、xtrabackup運行

環境說明

操作系統:centos 7.6

ip地址:192.168.31.250

mysql數據目錄(宿主機):/home/data

mysql備份目錄(宿主機):/home/backup

 

說明:mysql容器和xtrabackup容器運行在同一台服務器上,因為xtrabackup運行過程中,需要讀取mysql數據目錄。

 

有3種方案安裝xtrabackup,分別是:

編譯安裝
在線安裝
docker封裝

這里選擇第3種方案,使用docker部署比較方案,方便遷移。

 

下載xtrabackup

下載地址:https://www.percona.com/downloads/

找到Percona XtraBackup

 

 這里選擇2.4版本,8.0版本太新了。

 

選擇centos7,下載percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

 

鏡像封裝

這里以centos:7.8.2003作為基礎鏡像。

新建目錄

mkdir -p /opt/centos7.8_xtrabackup

最終目錄結構如下:

./
├── dockerfile
└── percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

 

dockerfile

FROM centos:7.8.2003
ADD percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm /
RUN yum install -y /percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm && \
    yum clean all && \
    rm -rf /percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

 

生成鏡像

docker build -t centos7.8_xtrabackup:v1 .

 

運行鏡像

docker run -it -d \
  --name centos7.8_xtrabackup \
  --restart=always \
  -e TZ=Asia/Shanghai \
  -v /home/backup:/backup \
  -v /home/data:/data \
  centos7.8_xtrabackup:v1

 

完整備份

進入docker

docker exec -it centos7.8_xtrabackup /bin/bash

 

執行以下命令

innobackupex --user=root --password=12456 --port=3306 --host=192.168.31.250 --socket=/data/mysql/data/mysqld.sock --datadir=/data/mysql/data --stream=tar /backup |gzip>/backup/mysql.tar.gz

輸出:

...
201110 15:39:17 [00] Streaming <STDOUT>
201110 15:39:17 [00]        ...done
xtrabackup: Transaction log of lsn (295739637) to (295739646) was copied.
201110 15:39:17 completed OK!

有輸出completed OK,表示備份成功。

 

參數說明:

--user     #指定數據庫備份用戶
–password  #指定數據庫備份用戶密碼
–port      #指定數據庫端口
–host      #指定備份主機
–socket    #指定socket文件路徑
--datadir  #指定mysql datadir路徑
--stream   #指定流的格式做備份,–stream=tar,將備份文件歸檔

 

查看備份文件

[root@a241640e14f2 ]# ll /backup/
total 35548
-rw-r--r-- 1 root root 36400167 Nov 10 15:39 mysql.tar.gz

會發現,多了一個mysql.tar.gz

 

 

本文參考鏈接:

https://blog.csdn.net/leshami/article/details/41043269

https://www.cnblogs.com/nmap/p/6722400.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM