您可以使用RDS MySQL的備份下載功能,將雲端硬碟執行個體的快照備份資料轉換成CSV檔案或SQL檔案匯出,然後通過該檔案將資料恢複到自建MySQL資料庫中。本教程僅供參考,文中用於恢複的Python指令檔當前已停止維護,請謹慎使用。
前提條件
RDS執行個體需滿足以下條件:
MySQL資料庫版本:8.0、5.7(支援Serverless執行個體)
儲存類型:ESSD雲端硬碟、高效能雲端硬碟
說明您可以前往執行個體基本資料頁面查看以上資訊。
已開啟資料歸檔功能的高效能雲端硬碟執行個體暫不支援進階下載功能,下載任務將執行失敗。
RDS執行個體未開啟TDE加密。執行個體中若存在加密過的表,會導致恢複過程出錯,請先對已加密的表執行解密。
請確保自建MySQL資料庫已開啟
local_infile
參數。說明查看local_infile參數狀態(ON表示已開啟):
SHOW GLOBAL VARIABLES LIKE 'local_infile';
開啟local_infile參數:
SET GLOBAL local_infile=1;
功能限制
從下載的備份組(雲端硬碟執行個體的快照備份資料轉換成CSV檔案或SQL檔案)恢複到本地MySQL資料庫時,需要注意以下限制:
不支援以下二進位欄位類型:BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。
說明如果備份組中包含這些欄位類型,它們將會以十六進位格式進行儲存。在匯入時,MySQL會將二進位欄位當作字串進行處理。此種情況下,需要手動在
load data local infile
命令中使用UNHEX函數將十六進位格式轉換為原始的二進位串。BLOB類型的資料可以使用
mysqldump
備份恢複到本地MySQL資料庫。備份資料:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <自建資料庫名> --skip-triggers --skip-lock-tables > /tmp/<自建資料庫名>.sql
恢複資料:
mysql -h 127.0.0.1 -u 使用者名稱 -p 資料庫名 < 備份檔案.sql
不支援以下空間欄位類型:GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
注意事項
資料庫版本一致:建議RDS MySQL資料庫和自建MySQL資料庫版本保持一致。不同版本的資料庫間可能存在不相容的特性,導致恢複失敗。
確保不存在同名的庫表:在執行恢複命令前,請確保目標資料庫中不存在與備份資料中同名的資料庫和表,以防止資料衝突或資料丟失。請仔細檢查並刪除可能會產生衝突的同名資料庫和表。
任務中斷:在進行恢複任務時,如果您因為某些原因中斷了恢複任務,可能會導致恢複資料不完整或恢複失敗,請謹慎操作。
操作步驟
本樣本以RDS MySQL雲端硬碟執行個體的SQL檔案恢複至ECS執行個體(CentOS 7.8 64位)的自建MySQL資料庫為例,其他環境請使用對應命令。
登入RDS控制台,使用下載備份功能將雲端硬碟執行個體的備份檔案轉換成CSV檔案或SQL檔案,並下載到本地或ECS執行個體中。
在本地或ECS執行個體中解壓下載的備份檔案,命令如下:
tar -izxvf <壓縮包檔案名稱>.tar.gz -C <解壓縮後的檔案位置>
本樣本將名為
backup.tar.gz
的壓縮檔解壓縮到指定目錄/home/mysql/data
中,具體請以實際檔案名稱和目錄為準。tar -izxvf backup.tar.gz -C /home/mysql/data
(可選)查看備份檔案是否已解壓到指定位置(/home/mysql/data)。
ls -al /home/mysql/data
將MySQL Python指令檔下載至本地或ECS執行個體中。
對Python指令檔
restore_from_downloads.py
進行授權,命令如下:chmod +x ./restore_from_downloads.py
將CSV檔案或SQL檔案恢複至自建資料庫,恢複命令如下:
python ./restore_from_downloads.py <CSV檔案或SQL檔案目錄路徑> <資料庫主機> <資料庫連接埠> <資料庫帳號> <資料庫密碼>
樣本如下:
python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"
執行結果:
重要請確保自建資料庫中沒有和備份資料中同名的資料庫,否則會導致恢複失敗。
恢複命令中CSV檔案或SQL檔案目錄路徑不能包含特殊字元(如
&
),否則指令碼執行可能會中斷。如有特殊字元,請使用英文雙引號("")包裹參數,例如python ./restore_from_downloads.py "/path/to/my_table&test.csv" 127.0.0.1 3306 root password12
。如果資料庫帳號名或密碼中包含了特殊字元(例如:#、空格等),在命令列傳入參數時需要使用英文雙引號("")包裹密碼。例如,如果資料庫密碼是
#1234
,則需要在命令列中傳入"#1234"
。如果出現類似
Command 'python' not found
的報錯,說明系統中沒有安裝Python或者Python命令不在系統的搜尋路徑中。此時請確認您系統中安裝的Python版本以及執行Python的命令是否正確。例如,如果系統中安裝了Python3,可以使用python3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx"
。
相關文檔
本方案僅適用於雲端硬碟版執行個體的快照備份恢複。如果您需要恢複高效能本地碟執行個體的備份,請參見RDS MySQL物理備份檔案恢複到自建資料庫或RDS MySQL邏輯備份檔案恢複到自建資料庫。
阿里雲提供的遷移服務也可協助您將RDS MySQL遷移至自建MySQL資料庫。更多詳情,請參見從RDS MySQL遷移至自建MySQL。
更多資料恢複方案,請參見資料恢複方案概覽。