您可以使用RDS PostgreSQL的備份下載功能,將云盤實例的快照備份數據轉換成CSV文件或SQL文件導出,然后通過該文件將數據恢復到自建PostgreSQL數據庫中。
操作步驟
本示例以RDS PostgreSQL云盤實例的SQL文件恢復至ECS實例(CentOS 7.8 64位Linux系統)的自建PostgreSQL數據庫為例,以下命令和腳本不支持在非Linux環境下使用,否則將會報錯。
登錄RDS控制臺,使用下載備份功能將云盤實例的備份文件轉換成CSV文件或SQL文件,并下載到本地或ECS實例中。
在本地或ECS實例中解壓下載的備份文件,命令如下:
tar -zxvf <壓縮包文件名>.tar.gz -C <解壓縮后的文件位置>
本示例將名為
backup.tar.gz
的壓縮文件解壓縮到指定目錄/home/ecs-test-user
中,具體請以實際文件名和目錄為準。tar -zxvf backup.tar.gz -C /home/ecs-test-user
(可選)查看備份文件是否已解壓到指定位置(/home/ecs-test-user)。
ls -al /home/ecs-test-user
將PostgreSQL Python腳本文件下載至本地或ECS實例中。
對Python腳本文件
restore_from_downloads.py
進行授權,命令如下:chmod +x ./restore_from_downloads.py
將CSV文件或SQL文件恢復至自建數據庫,恢復命令如下:
python3 restore_from_downloads.py <CSV文件或SQL文件目錄路徑> <數據庫主機> <數據庫端口> <數據庫賬號> <數據庫密碼>
示例如下:
python3 restore_from_downloads.py /home/ecs-test-user 127.0.0.1 5432 postgres "#Tes********"
重要請確保自建數據庫中沒有和待導入的數據庫同名的庫,否則將導入失敗。
如果數據庫賬號名或密碼中包含了特殊字符(例如:#、空格等),在命令行傳入參數時需要使用英文雙引號("")將密碼括起來。例如,如果數據庫密碼是
#1234
,則需要在命令行中傳入"#1234"
。如果您的系統沒有安裝Python 3.x,恢復可能會出錯。您可通過
python3 --version
命令查看Python版本。
相關文檔
對于少量的數據,例如恢復某個表的數據,您也可使用邏輯備份進行快速恢復。具體操作,請參見使用pg_restore恢復邏輯備份文件數據。
阿里云提供的遷移服務也可幫助您將RDS PostgreSQL遷移至自建PostgreSQL數據庫。更多詳情,請參見PostgreSQL為源的數據遷移。
更多數據恢復方案,請參見恢復方案概覽。