一、概述
線上有一個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