全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL備份檔案按時間點恢複到自建資料庫

更新時間:Mar 06, 2025

您可以參考本文樣本,在本地或ECS執行個體的自建MySQL資料庫上進行RDS MySQL的增量恢複,以恢複到指定的時間點。

說明

注意事項

  • 本文僅提供本地增量恢複的步驟說明,您需要自行配置和搭建自建環境。實際操作時,請根據您自己的環境進行具體的配置和命令調整。

  • 在本地或ECS執行個體上恢複RDS MySQL備份資料操作是否成功,取決於您本地MySQL環境的配置。

  • 使用者本地環境的 MySQL 版本需滿足以下要求:

    • 版本相容性:本地 MySQL 版本必須大於或等於 RDS MySQL 的版本。

      • 對於RDS MySQL5.6,本地MySQL版本需高於5.6.16。

      • 對於RDS MySQL5.5,本地MySQL版本需高於5.5.18。

    • 版本限制:MySQL 5.5和5.6屬於不同的主要版本,無法使用高版本(如MySQL 5.6)對低版本(如RDS MySQL 5.5)進行資料恢複或操作。

增量恢複

本文以tar.gz格式的MySQL 5.6.20社區版為樣本。

  1. 準備工作:在本地MySQL上建立一個遠程登入使用者並賦予相應許可權。詳情請參見使用權限設定

  2. 執行以下命令,查看由XtraBackup工具產生的備份檔案中的Binlog位置資訊,確定開始增量恢複的起始位置。

    cat xtrabackup_binlog_info
    說明

    xtrabackup_binlog_info檔案目錄請以實際環境為準,可以使用find命令查看。

    系統顯示類似如下:

    mysql-bin.000688  531167  66ef5f51-94f3-11e5-98cf-40a8f034c4d0:1-405320,
    72fb7cf6-94f3-11e5-98cf-a0d3c1f98c98:1-3082798,
    79f98899-5d2d-11e4-a7c9-ecf4bbc08418:1-365786,
    7e88493e-5d2d-11e4-a7c9-ecf4bbc06cb8:1,
    a9285f36-9d56-11e4-8a2c-d89d672a9530:1-29549875,
    ac2d9725-9d56-11e4-8a2c-d89d672af420:1-4838217
    說明

    mysql-bin.000688為應用的起始Binlog檔案,531167為開始位置點(start position)。

  3. 從RDS控制台擷取與備份檔案所在執行個體編號一致的Binlog記錄檔,執行以下命令下載備份檔案:

    wget -c "記錄備份下載連結" -O <記錄檔名> 

    mysql-bin.000688mysql-bin.000689檔案為例,樣本如下:

    wget -c "http://rdslog-hz-v3-3az.oss-cn-hangzhou.aliyuncs.com/custins71349641/hostins26******/mysql-bin.000688?Expires=16951*******" -O mysql-bin.000688 
    說明

    記錄備份檔案下載連結擷取方法,請參見下載備份

  4. 通過mysqlbinlog命令分析檔案內容,確定增量恢複到的時間點。

    mysqlbinlog -v --base64-output=decode-rows mysql-bin.0006XX > 689.log
  5. 執行以下命令,查看689.log檔案,確認想要恢複的時間點。

    vi 689.log
  6. 執行以下命令,執行增量恢複,恢複到指定的時間點。

    mysqlbinlog binlog_file1 binlog_file2 ... binlog_filen --start-position=xxxx  --stop-datetime="YYYY-mm-dd hh:mm:ss" | mysql -uuser -p<$Password> -P<$Port> -h<$Host_IP>

    樣本如下:

    mysqlbinlog mysql-bin.000688 mysql-bin.000689 --start-position=531167 --stop-datetime="2016-05-16 18:05:03" | mysql -uuser -p<$Password> -P<$Port> -h<$Host_IP>

    參數解釋如下:

    參數

    含義

    binlog_file1 binlog_file2 ... binlog_filen

    用於指定要恢複的Binlog檔案,可以根據需要指定多個檔案。請將binlog_file1 binlog_file2 ... binlog_filen替換為實際的Binlog檔案名稱。

    --start-position=xxxx

    用於指定開始恢複的Binlog位置點,該位置點應存在於指定的第一個Binlog檔案中。請將xxxx替換為實際的位置點。

    --stop-position=xxxx

    用於指定恢複到的Binlog位置點,該位置點應該存在於最後一個指定的Binlog檔案中。請將xxxx替換為實際的位置點。

    --start-datetime="YYYY-MM-DD HH:MM:SS"

    用於指定開始恢複的時間點,即從第一個等於或大於該時間點的Binlog事件開始恢複。時間點以本地時間時區為準,格式為MySQL可接受的時間格式,例如:"2016-05-16 08:01:05"。請將"YYYY-MM-DD HH:MM:SS"替換為實際的時間點。

    --stop-datetime="YYYY-MM-DD HH:MM:SS"

    用於指定停止恢複的時間點,即在第一個等於或大於該時間點的Binlog事件停止恢複。時間點以本地時間時區為準,格式為MySQL可接受的時間格式,例如:"2016-05-16 08:01:05"。

    請將"YYYY-MM-DD HH:MM:SS"替換為實際的時間點。

    -p<$Password>

    用於指定MySQL密碼,請將<$Password>替換為實際的密碼,且-p參數和<$Password>間不要有空格。

    -P<$Port>

    用於指定MySQL連接埠號碼,請將<$Port>替換為實際的連接埠號碼。

    -h<$Host_IP>

    用於指定MySQL主機IP,請將<$Host_IP>替換為實際的主機IP。

    說明

    您可以按需選擇使用 --start-position--stop-position 來指定位置點,或使用 --start-datetime--stop-datetime 來指定時間點,來確定需要恢複的Binlog事件的範圍。

常見問題

如果您在使用MySQL 5.7或8.0版本進行增量備份出現ERROR 1227 (42000) at line 7: Access denied; you need (at least one of) the SUPER privilege(s) for this operation報錯時,說明MySQL伺服器拒絕了訪問,目前使用者沒有足夠的許可權。您需要聯絡資料庫管理員或使用具有足夠許可權的使用者進行授權操作。

適用於

雲資料庫RDS MySQL版