您可以使用PolarDB的備份檔案下載功能,將雲端硬碟執行個體的快照備份資料轉換成CSV檔案或SQL檔案匯出,然後通過該檔案將資料恢複到自建MySQL資料庫中。
本教程僅供參考,文中用於恢複的Python指令檔當前已停止維護,使用前,請進行相應評估。
前提條件
PolarDB MySQL版叢集要求
為確保備份檔案的可恢複性,建議在進行資料庫恢複前,務必保證自建資料庫版本與目標PolarDB MySQL版本的完全一致。
叢集地區要求:
叢集:僅企業版叢集中的叢集版系列支援備份檔案下載功能。
地區:西南1(成都)、華南3(廣州)、華北1(青島)、華北2(北京)、華東2(上海)、華北3(張家口)、華東1(杭州)、華南1(深圳)、中國香港、馬來西亞(吉隆坡)、印尼(雅加達)、日本(東京)、新加坡、美國(矽谷)、美國(維吉尼亞)、德國(法蘭克福)。
說明其餘地區將陸續上線。
其他:
RAM帳號需要具備下載備份檔案的許可權。如需為RAM帳號授權,請參見RAM帳號許可權說明。
備份資料未加密,加密的PolarDB叢集不支援下載備份檔案。
自建MySQL資料庫要求
請確保自建MySQL資料庫已開啟local_infile參數。
查看local_infile參數狀態(ON表示已開啟):
SHOW GLOBAL VARIABLES LIKE 'local_infile';開啟local_infile參數:
SET GLOBAL local_infile=1;
功能限制
從下載的備份組恢複到本地MySQL資料庫時,需要注意以下限制:
不支援以下二進位欄位類型:BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。
說明如果備份組中包含這些欄位類型,它們將會以十六進位格式進行儲存。在匯入時,MySQL會將二進位欄位當作字串進行處理。此種情況下,需要手動在
load data local infile命令中使用UNHEX函數將十六進位格式轉換為原始的二進位串。不支援以下空間欄位類型:GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
注意事項
建議PolarDB MySQL版資料庫和自建MySQL資料庫版本保持一致。不同版本的資料庫間可能存在不相容的特性,導致恢複失敗。
在執行恢複命令前,請確保目標資料庫中不存在與備份資料中同名的資料庫和表,以防止資料衝突或資料丟失。請仔細檢查並刪除可能會產生衝突的同名資料庫和表。
在進行恢複任務時,如果您因為某些原因中斷了恢複任務,可能會導致恢複資料不完整或恢複失敗,請謹慎操作。
操作步驟
本樣本以PolarDB MySQL版叢集的SQL檔案恢複至ECS執行個體(CentOS 7.8 64位)的自建MySQL資料庫為例,其他環境請使用對應命令。
登入PolarDB控制台,使用下載備份檔案功能將叢集的備份檔案轉換成CSV檔案或SQL檔案,並下載到本地或ECS執行個體中。
在本地或ECS執行個體中解壓下載的備份檔案,命令如下:
若備份檔案為
.tar.gz格式:tar -izxvf <壓縮包檔案名稱>.tar.gz -C <解壓縮後的檔案位置> # 本樣本將名為backup.tar.gz的壓縮檔解壓縮到指定目錄/home/mysql/data中,具體請以實際檔案名稱和目錄為準 tar -izxvf backup.tar.gz -C /home/mysql/data若備份檔案為
.tar.zst格式:zstd -d -c <壓縮包檔案名稱>.tar.zst | tar -xvf - -C <解壓縮後的檔案位置> # 本樣本將名為backup.zst的壓縮檔解壓縮到指定目錄/home/mysql/data中,具體請以實際檔案名稱和目錄為準 zstd -d -c backup.tar.zst | tar -xvf - -C /home/mysql/data
(可選)查看備份檔案是否已解壓到指定位置(
/home/mysql/data)。ls -al /home/mysql/data將Python指令檔.py下載至本地或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********"說明當前Python指令檔視窗關閉後會導致該指令碼停止執行,後台執行命令如下:
nohup python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********" > app.log 2>&1 &執行結果:
重要請確保自建資料庫中沒有和備份資料中同名的資料庫,否則會導致恢複失敗。
如果資料庫帳號名或密碼中包含了特殊字元(例如:#、空格等),在命令列傳入參數時需要使用英文雙引號("")將密碼括起來。例如,如果資料庫密碼是
#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"。在執行Python指令碼時,如果出現警告資訊
[Warning] Using a password on the command line interface can be insecure,是由於Python指令碼內部使用了mysql -h<資料庫連接地址> -P<資料庫連接埠> -u<資料庫帳號> -p<資料庫密碼> -e<SQL>命令。因此,系統會提示在命令列輸入密碼可能會導致系統上的其他使用者通過執行ps等命令查看到密碼。這一警告不會影響您的恢複操作,恢複完成後,您可以登入自建MySQL資料庫修改帳號密碼。如果出現類似
Access denied for user 'xxx'@'xxx' (using password: YES)的報錯,說明資料庫帳號或密碼錯誤,請檢查您是否輸入正確。