本例介紹通過 psql 命令將 PostgreSQL 資料備份檔案恢複到目標 RDS 中。
背景資訊
PostgreSQL 支援邏輯備份。我們使用 pg_dump 邏輯備份功能,匯出備份檔案,再通過 psql 匯入到 RDS 中,實現將 PostgreSQL 的資料匯入到 RDS 中。
前提條件
準備本機資料
- 通過 PostgreSQL 用戶端,串連本地 PostgreSQL 資料庫。
- 執行如下命令,備份資料。
pg_dump -U username -h hostname -p port databasename -f filename
參數說明如下:
- username:本機資料庫使用者名
- hostname:本機資料庫主機名稱,如果是在本機資料庫主機登入,可以使用 localhost
- port:本機資料庫連接埠號碼
- databasename:要備份的本機資料庫名
- filename:要產生的備份檔案名稱
例如,資料庫使用者 William 要備份本地 PostgreSQL 資料庫,登入 PostgreSQL 主機後,通過如下命令備份資料。
pg_dump -U William -h localhost -p 3433 pg001 -f pg001.sql
正式遷移操作
说明 通過 RDS 內網恢複資料,網路更穩定,資料更安全。建議您通過將資料上傳到Elastic Compute Service 上,然後通過內網將資料恢複到目標
RDS上。如果資料檔案太大,可以先壓縮後再上傳。本例以該方式為例進行說明。
- 登入Elastic Compute Service。
- 通過 PostgreSQL 用戶端,執行如下命令將資料匯入到 RDS
中。
psql -U username -h hostname -d desintationdb -p port -f dumpfilename.sql
參數說明如下:
- username:RDS 上的 PostgreSQL 資料庫使用者名
- hostname:RDS 上的 PostgreSQL 資料庫地址
- port:RDS 上的 PostgreSQL 資料庫連接埠號碼
- databasename:RDS 上的 PostgreSQL 資料庫名
- filename:本地備份資料檔案名
如:
psql -U William -h postgresql.rds.aliyuncs.com -d pg001 -p 3433 -f pg001.sql
由於 RDS 資料庫的使用權限設定和本機資料庫不一致,在資料匯入處理程序當中可能會出現一些與許可權相關的 WARNING 或 ERROR,可以忽略,如:
WARNING: no privileges could be revoked for "xxxxx" ERROR: role "xxxxx" does not exist