阿里云數據庫PostgreSQL版支持通過邏輯備份文件將云上數據遷移到本地數據庫。
前提條件
本地已安裝PostgreSQL,且數據庫大版本與RDS PostgreSQL相同。
說明本文所使用的備份工具pg_dump是PostgreSQL的自帶工具,在本地安裝PostgreSQL的同時會自動安裝。
本地數據庫中已創建數據庫且數據庫中無數據,用于恢復數據。
本地數據庫已創建superuser用戶。
操作步驟
在本地命令行窗口執行如下命令,備份數據。
pg_dump -U <username> -h <hostname> -p <port> <databasename> -f <filename> --exclude-table=public.ha_health_check
參數說明如下:
參數
說明
username
云數據庫高權限賬號名。如何創建高權限賬號,請參見創建賬號。
hostname
云數據庫主機名。
port
云數據庫端口號。
databasename
要備份的數據庫名。
filename
要生成的備份文件名稱。
--exclude-table=public.ha_health_check
用于跳過高可用檢查表。
示例
pg_dump -U testuser -h xxxx.pg.rds.aliyuncs.com -p 5432 testdb -f bkfile.sql --exclude-table=public.ha_health_check
執行如下命令將數據恢復到本地數據庫。
psql -U <username> -h <hostname> -d <databasename> -p <port> -f <filename.sql>
參數說明如下:
參數
說明
username
本地數據庫superuser用戶名。
hostname
本地數據庫地址,配置為localhost。
port
本地數據庫端口號。
databasename
目的數據庫名。
filename
備份文件名稱。
示例
psql -U testuser -h localhost -d testdb -p 5432 -f bkfile.sql
由于 RDS 數據庫的權限設置和本地數據庫不一致,在數據導入過程當中可能會出現一些與權限相關的 WARNING 或 ERROR,可以忽略,例如:
WARNING: no privileges could be revoked for "xxxxx"
ERROR: role "xxxxx" does not exist
常見問題
Q:恢復時報錯
ERROR: role "pg_rds_superuser" does not exist
、WARNING: no privileges could be revoked for "xxxxx"
如何處理?A:由于 RDS 數據庫的權限設置和本地數據庫不一致,在數據導入過程當中可能會出現一些與權限相關的 WARNING 或 ERROR,可以忽略。