簡體   English   中英

大型 MySQL XtraBackup 流到 S3 的問題

[英]Issues with large MySQL XtraBackup stream to S3

我們有一個定制的數據庫備份解決方案,它將在不久的將來給我們帶來問題。 我會解釋的。 S3 的單個文件限制為 ~5TB。 我們的備份解決方案使用帶有 xbstream 選項的 xtrabackup,然后將其通過管道傳輸到“aws s3 cp”命令以將其存儲在 S3 中。 腳本的有趣部分如下所示:

innobackupex {0} --host={4} --slave-info --stream=xbstream /tmp {5} | lzop | /usr/local/bin/aws s3 cp - {1}/{2} --expected-size {6} --storage-class STANDARD

忽略變量,它們是從腳本的不同部分注入的。 需要注意的關鍵是 xtrabackup xbstream 輸出通過管道傳輸到 lzop 以對其進行壓縮,然后通過管道傳輸到“aws s3 cp”命令以將其作為多部分上傳存儲在我們的存儲桶中。

我們使用流模式來避免本地存儲成本。 到現在為止,您可能已經猜到了這個問題。 我們的壓縮備份大小正在迅速接近 5TB 的限制,當我們達到它時將是災難性的。

所以這是我的請求。 有沒有一種方法可以將大於 5TB 的壓縮備份從 XtraBackup 的 xbstream 寫入 S3 到 S3,而不會影響我們不在本地存儲任何內容的偏好?

我不太精通 bash 管道。 有沒有辦法“分塊”流,以便它每 X 個字節寫入一個新文件/流? 或者任何其他理智的選擇? 我們寧願避免寫入原始備份,因為它是壓縮備份大小的 4 倍。

謝謝!

關於您的具體問題:

有沒有辦法“分塊”流,以便它每 X 個字節寫入一個新文件/流?

調整當前工作流程以“分塊”備份文件的最佳選擇是使用GNU Parallel,使用--pipe (和--block指定每個數據塊的大小以通過管道傳遞到每個aws實例)。

最后,我使用了 xtrabackup 2.4+ 附帶的 xbcloud 實用程序。 您可以使用合適的 --read-buffer-size 參數將流通過管道傳輸到 xbcloud,並獲得良好的性能“將備份“分塊”到 S3。 只需確保您運行的是 MySQL/Xtrabackup 8.0,因為之前的任何版本都無法進行壓縮備份,然后在流中恢復和解壓縮它們。 我們的其中一台服務器不是 MySQL 8.0,由於該限制,我們需要從中進行原始未壓縮備份。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM