Xtrabackup備份到S3

使用方式

Xtrabackup從2.4.14版本開(kāi)始,支持stream模式直接存儲(chǔ)到文件系統(tǒng)(主要依賴xbcloud)。無(wú)需備份到本地后,再上傳到文件系統(tǒng)

xbcloud的目的是從云中下載全部或部分xbstream存檔并將其上傳到云。同時(shí)不會(huì)覆蓋相同名稱的備份。xbcloud通過(guò)管道接收來(lái)自xbstream的輸入,因此可以使用xtrabackup作為管道來(lái)調(diào)用它,以直接傳輸至云而無(wú)需本地存儲(chǔ)。

xbcloud將每個(gè)塊作為一個(gè)單獨(dú)的對(duì)象存儲(chǔ),名稱為backup_name / database / table.ibd.NNNNNNNNNNNNNNNNNNNNNNNN,其中NNN ...是文件中塊的0填充序列號(hào)。xtrabackup和xbstream生成的塊的大小更改為10M。

xbcloud具有三個(gè)基本操作:放置,獲取和刪除。通過(guò)這些操作,可以創(chuàng)建,存儲(chǔ),檢索,還原和刪除備份。xbcloud操作清楚地映射到AWS S3 API中的類似操作。

在Percona XtraBackup 2.4.14之前,Swift是將備份存儲(chǔ)在云存儲(chǔ)中的唯一選擇。在2.4.14版本之后,xbcloud還支持Amazon S3,MinIO和Google Cloud Storage。還支持其他與Amazon S3兼容的存儲(chǔ),例如Wasabi或Digital Ocean Spaces。

使用方式如下:

$ xtrabackup --backup --stream=xbstream --target-dir=/tmp | xbcloud \
put [options] <name>

創(chuàng)建備份并備份到Amazon S3

$ xtrabackup --backup --stream=xbstream --extra-lsndir=/tmp --target-dir=/tmp | \
xbcloud put --storage=s3 \
--s3-endpoint='s3.amazonaws.com' \
--s3-access-key='YOUR-ACCESSKEYID' \
--s3-secret-key='YOUR-SECRETACCESSKEY' \
--s3-bucket='mysql_backups'
--parallel=10 \
${date -I}-full_backup

使用Amazon S3時(shí),以下選項(xiàng)可用:

Option Details
–s3-access-key 用于AWS訪問(wèn)密鑰ID
–s3-secret-key 用于AWS秘密訪問(wèn)密鑰
–s3-bucket 使用的AWS存儲(chǔ)桶名稱
–s3-region 用于指定AWS區(qū)域。默認(rèn)值為us-east-1
–s3-api-version = <AUTO|2|4> 選擇簽名算法。默認(rèn)值為AUTO。在這種情況下,xbcloud將進(jìn)行探測(cè)。
–s3-bucket-lookup = <AUTO|PATH|DNS> 指定使用bucket.endpoint.com還是endpoint.com/bucket*樣式請(qǐng)求。默認(rèn)值為AUTO。在這種情況下,xbcloud將進(jìn)行探測(cè)。

使用MinIO創(chuàng)建完整備份

$ xtrabackup --backup --stream=xbstream --extra-lsndir=/tmp --target-dir=/tmp | \
xbcloud put --storage=s3 \
--s3-endpoint='play.minio.io:9000' \
--s3-access-key='YOUR-ACCESSKEYID' \
--s3-secret-key='YOUR-SECRETACCESSKEY' \
--s3-bucket='mysql_backups'
--parallel=10 \
${date -I}-full_backup

配置文件:
不經(jīng)常更改的參數(shù)可以存儲(chǔ)在my.cnf或自定義配置文件中。以下示例是[xbcloud]組下的配置選項(xiàng)模板:

[xbcloud]
storage=s3
s3-endpoint=http://localhost:9000/
s3-access-key=minio
s3-secret-key=minio123
s3-bucket=backupsx
s3-bucket-lookup=path
s3-api-version=4

獲取備份:

$ xbcloud get s3://operator-testing/bak22 ...

在此示例中,s3表示存儲(chǔ)類型,operator-testing是存儲(chǔ)桶名稱,bak22是備份名稱。此快捷方式擴(kuò)展如下:

$ xbcloud get --storage=s3 --s3-bucket=operator-testing bak22 ...

附加參數(shù):
xbcloud接受可以與任何存儲(chǔ)類型一起使用的其他參數(shù)。--md5參數(shù)計(jì)算備份塊的MD5哈希值。結(jié)果存儲(chǔ)在遵循backup_name.md5模式的文件中。

$ xtrabackup --backup --stream=xbstream \
--parallel=8 2>backup.log | xbcloud put s3://operator-testing/bak22 \
--parallel=8 --md5 2>upload.log

可以使用--header參數(shù)在指定客戶密鑰時(shí)使用服務(wù)器端加密傳遞附加的HTTP標(biāo)頭。

使用–header進(jìn)行AES256加密的示例

$ xtrabackup --backup --stream=xbstream --parallel=4 | \
xbcloud put s3://operator-testing/bak-enc/ \
--header="X-Amz-Server-Side-Encryption-Customer-Algorithm: AES256" \
--header="X-Amz-Server-Side-Encryption-Customer-Key: CuStoMerKey=" \
--header="X-Amz-Server-Side-Encryption-Customer-Key-MD5: CuStoMerKeyMd5==" \
--parallel=8

使用Amazon S3還原:

$ xbcloud get s3://operator-testing/bak22 \
--s3-endpoint=https://storage.googleapis.com/ \
--parallel=10 2>download.log | xbstream -x -C restore --parallel=8

增量備份:
首先,需要進(jìn)行增量備份所基于的完整備份:

xtrabackup --backup --stream=xbstream --extra-lsndir=/storage/backups/ \
--target-dir=/storage/backups/ | xbcloud put \
--storage=swift --swift-container=test_backup \
--swift-auth-version=2.0 --swift-user=admin \
--swift-tenant=admin --swift-password=xoxoxoxo \
--swift-auth-url=http://127.0.0.1:35357/ --parallel=10 \
full_backup

然后,可以進(jìn)行增量備份:

$ xtrabackup --backup --incremental-basedir=/storage/backups \
--stream=xbstream --target-dir=/storage/inc_backup | xbcloud put \
--storage=swift --swift-container=test_backup \
--swift-auth-version=2.0 --swift-user=admin \
--swift-tenant=admin --swift-password=xoxoxoxo \
--swift-auth-url=http://127.0.0.1:35357/ --parallel=10 \
inc_backup

Preparing增量備份
要Preparing備份,首先需要下載完整備份:

$ xbcloud get --swift-container=test_backup \
--swift-auth-version=2.0 --swift-user=admin \
--swift-tenant=admin --swift-password=xoxoxoxo \
--swift-auth-url=http://127.0.0.1:35357/ --parallel=10 \
full_backup | xbstream -xv -C /storage/downloaded_full

下載完整備份后,應(yīng)做好以下準(zhǔn)備:

$ xtrabackup --prepare --apply-log-only --target-dir=/storage/downloaded_full

準(zhǔn)備完整備份后,可以下載增量備份

$ xbcloud get --swift-container=test_backup \
--swift-auth-version=2.0 --swift-user=admin \
--swift-tenant=admin --swift-password=xoxoxoxo \
--swift-auth-url=http://127.0.0.1:35357/ --parallel=10 \
inc_backup | xbstream -xv -C /storage/downloaded_inc

下載增量備份后,可以通過(guò)運(yùn)行以下內(nèi)容進(jìn)行準(zhǔn)備

$ xtrabackup --prepare --apply-log-only \
--target-dir=/storage/downloaded_full \
--incremental-dir=/storage/downloaded_inc

$ xtrabackup --prepare --target-dir=/storage/downloaded_full

部分下載云備份
如果不想下載整個(gè)備份來(lái)還原特定的數(shù)據(jù)庫(kù),則可以僅指定要還原的表

$ xbcloud get --swift-container=test_backup
--swift-auth-version=2.0 --swift-user=admin \
--swift-tenant=admin --swift-password=xoxoxoxo \
--swift-auth-url=http://127.0.0.1:35357/ full_backup \
ibdata1 sakila/payment.ibd \
> /storage/partial/partial.xbs

$ xbstream -xv -C /storage/partial < /storage/partial/partial.xbs

該命令將從完整備份中僅下載ibdata1sakila/payment.ibd

例子

搭建MinIO

[root@localhost ~]# mkdir /data/aws_s3
[root@localhost ~]# wget  https://dl.minio.io/server/minio/release/linux-amd64/minio
[root@localhost ~]#  chmod  755  /usr/local/bin/minio
[root@localhost ~]# minio server  /data/aws_s3

簡(jiǎn)單幾步,已經(jīng)搭建好MinIO服務(wù)器,默認(rèn)端口9000,可以通過(guò)瀏覽器訪問(wèn),AccessKey和SecretKey在啟動(dòng)時(shí)已經(jīng)輸出到屏幕。

瀏覽器打開(kāi)后,填入兩個(gè)Key,就可以順利進(jìn)入。

MinIO

點(diǎn)擊右下角的“+”,可以創(chuàng)建bucket和上傳文件,圖中是已經(jīng)創(chuàng)建好兩個(gè)bucket。

MinIO支持分布式存儲(chǔ),可以可以用來(lái)搭建分布式存儲(chǔ)系統(tǒng) GlusterFS,這里只是做用單機(jī)做測(cè)試,不再贅述。

備份到MinIO

下載好最新的xtrabackup(這里用的是2.4.18),就可以開(kāi)始備份了。

./xtrabackup --defaults-file=/etc/my.cnf --backup --stream=xbstream  \
--target-dir=/tmp/ --extra-lsndir=/tmp/ \
--host=127.0.0.1 --port=6666 --user=root --password=changeme | \ 
./xbcloud put --storage=s3 \
--s3-endpoint='http://localhost:9000' \
--s3-access-key='minioadmin' \
--s3-secret-key='minioadmin' \
--s3-bucket='6666' \
--parallel=10 \
6666-${date -I}-full_backup

當(dāng)看到類似

191221 16:54:14 completed OK!
191221 16:54:14 ./xbcloud: Upload completed.

代表備份成功

完。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容