Mysql

MySQL 僅使用 innobackupex 恢復增量備份

  • March 6, 2018

我正在將產品遷移到 AWS,我們有 1.5TB 的 MySQL 數據庫。我想以盡可能少的停機時間將其遷移到 AWS。我計劃實現以下目標。

  1. 使用 Percona XtraBackup innobackupex 進行一次完整備份。
  2. 在 AWS 節點上恢復它。
  3. 然後在最終遷移當天進行增量備份並將其還原到 AWS 節點上。

所以我的問題是,這可能嗎?

根據我的研究,不可能只恢復“增量”備份。Percona 描述的方式是,我們需要先進行完整備份,然後進行增量備份,然後準備它們並獲得一個可以在目的地恢復的完整備份。

首先讓我們了解,要進行增量備份,您需要在進行增量備份的伺服器上保留完整備份。

儘管您在 SERVER(A) 上進行了完整備份,但您可以推送到 AWSSERVER(B)。沒關係,但是為了進行增量,您需要將完整備份副本保留為源備份。

更新

以下是增量方法,無論您的想法是否可行,您都將能夠得到答案。

  1. Xtrabackup 完整備份完成後。

mkdir -p /備份/

innobackupex –defaults-file=/etc/my.cnf –user=mysql –password=’****’ /backup/

從這裡獲得 /backup/2017-06-01_18-01-52 完整備份集。

  1. 使用完整備份進行增量備份。

mkdir -p /備份/INCR

innobackupex –defaults-file=/etc/my.cnf –user=mysql –password=’*****’ –incremental /backup/INCR –incremental-basedir=/backup/2017-06-01_18 -01-52 –從屬資訊

從這裡 /backup/INCR/2017-06-01_18-10-41/ 獲得增量增量數據。

  1. 合併備份

innobackupex –defaults-file=/etc/my.cnf –user=mysql –password=’*****’ –apply-log-only /backup/2017-06-01_18-01-52/ - -incremental-dir=/backup/INCR/2017-06-01_18-10-41/

從這裡 /backup/2017-06-01_18-01-52/2017-06-01_18-22-29 最終備份集合併到父(完整備份)並從中創建一個子目錄。

  1. 將日誌應用到最終備份集。

innobackupex –defaults-file=/etc/my.cnf –user=mysql –password=’*****’ –apply-log /backup/2017-06-01_18-01-52/2017-06 -01_18-22-29

  1. 現在這是您的最終數據集: /backup/2017-06-01_18-01-52/2017-06-01_18-22-29/* ,將數據目錄替換為此數據集 -> 確保每 1 到 4 步沒有在所有輸出上發現錯誤並完成 OK。在測試數據庫上測試結果增量備份數據並還原它以查看伺服器是否啟動而沒有任何錯誤消息

如果您的 my.cnf 指向 /mysql/data/

  • 服務 mysqld 停止
  • mv /mysql/data/* /tmp/MOVED/
  • cp -r /backup/2017-06-01_18-01-52/2017-06-01_18-22-29/* /mysql/data/
  • chown -R mysql:mysql /mysql/data/
  • chmod -R 775 /mysql/數據/
  • 服務 mysqld 啟動
  • 登錄到 mysql

檢查錯誤日誌並做一些選擇查詢。

如果您的環境和業務允許,您也可以採用其他方式。

  1. 如果啟用了二進制日誌,則使用主資訊(二進制日誌位置)從源伺服器 (A) 進行 Percona 完整備份。
  2. 在目標機器 (AWS) 上恢復備份。
  3. 使目標機器成為源機器(A)的從機。
  4. 一旦同步,停止所有應用程序呼叫幾分鐘,並使目標 (B) 作為真正的主控器來接受讀寫呼叫。

引用自:https://dba.stackexchange.com/questions/175110