遷移準備
PostgreSQL支持邏輯備份。您可使用pg_dump邏輯備份功能,導出備份文件,再通過psql導入到RDS中,實現將PostgreSQL的數據導入到關系型數據庫中。
關系型數據庫服務支持開啟公網訪問功能,通過彈性公網IP進行訪問。您也可通過彈性云主機的內網訪問關系型數據庫。
準備工作
1. 準備彈性云主機或可公網訪問關系型數據庫。
? 通過彈性云主機連接關系型數據庫實例,需要創建一臺彈性云主機。
2. 在1中的彈性云主機或可訪問關系型數據庫的設備上,安裝PostgreSQL客戶端。
說明
該彈性云主機或可訪問關系型數據庫的設備上需要安裝和RDS for PostgreSQL數據庫服務端相同版本的數據庫客戶端,PostgreSQL數據庫或客戶端會自帶pg_dump和psql工具。
導出數據
要將已有的PostgreSQL數據庫遷移到關系型數據庫,需要先對它進行導出。
注意
相應導出工具需要與數據庫引擎版本匹配。
數據庫遷移為離線遷移,您需要停止使用源數據庫的應用程序。
導出或導入數據時,請謹慎,避免因操作不當導致實例或業務異常。
步驟 1 登錄已準備的彈性云主機,或可訪問關系型數據庫的設備。
步驟 2 使用pg_dump將源數據庫導出至SQL文件。
pg_dump--username=<DB_USER> --host=<DB_ADDRESS> --port=<DB_PORT> --format=plain --file=<BACKUP_FILE><DB_NAME>
DB_USER為數據庫用戶。
DB_ADDRESS為數據庫地址。
DB_PORT為數據庫端口。
BACKUP_FILE為要導出的文件名稱。
DB_NAME為要遷移的數據庫名稱。
根據命令提示輸入數據庫密碼。
說明
導出的SQL文件為INSERT語句時可以更容易地編輯和手動修改,但是導入數據的速度可能會比使用COPY語句慢一些,建議根據實際情況選擇導出合適的語句格式。
若源庫和目標庫都使用PostgreSQL數據庫,建議導出COPY語句(默認),參考?示例一:導出源數據庫至SQL文件(COPY語句...。
若源庫或目標庫使用了非PostgreSQL數據庫,建議導出INSERT語句,參考?示例二:導出源數據庫至SQL文件(INSERT...。
更多使用,請參見。
示例如下:
示例一:導出源數據庫至SQL文件(COPY語句)。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db
Password for user root:
示例二:導出源數據庫至SQL文件(INSERT語句)。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --inserts --file=backup.sql my_db
Password for user root:
示例三:導出源數據庫中所有表結構至SQL文件。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --schema-only --file=backup.sql my_db
Password for user root:
示例四:導出源數據庫中所有表數據至SQL文件。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --data-only --file=backup.sql my_db
Password for user root:
命令執行完會生成“backup.sql”文件,如下:
[rds@localhost ~]$ ll backup.sql
-rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql步驟 3 使用pg_dump將源數據庫中的表導出至SQL文件。
pg_dump --username=<DB_USER> --host=<DB_ADDRESS> --port=<DB_PORT> --format=plain --file=<BACKUP_FILE> <DB_NAME> --table=<TABLE_NAME>
DB_USER為數據庫用戶。
DB_ADDRESS為數據庫地址。
DB_PORT為數據庫端口。
BACKUP_FILE為要導出的文件名稱。
DB_NAME為要遷移的數據庫名稱。
TABLE_NAME為要遷移的數據庫中指定表名稱。
根據命令提示輸入數據庫密碼。
示例如下:
示例一:導出源數據庫中指定的單表至SQL文件。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test
Password for user root:
示例二:導出源數據庫中指定的多表至SQL文件。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test1 --table=test2
Password for user root:
示例三:導出源數據庫中以ts_開頭的所有表至SQL文件。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=ts_*
Password for user root:
示例四:導出源數據庫中除ts_開頭之外的所有表至SQL文件。
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db -T=ts_*
Password for user root:
命令執行完會生成“backup.sql”文件,如下:
[rds@localhost ~]$ ll backup.sql
-rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql----結束
導入數據
步驟 1 登錄已準備的彈性云主機,或可訪問關系型數據庫的設備。
步驟 2 確保導入的目標數據庫已存在。
如果不存在,執行以下命令創建數據庫:
# psql --host=<RDS_ADDRESS>--port=<DB_PORT>--username=root--dbname=postgres-c "create database<DB_NAME>;"
RDS_ADDRESS為RDS實例的IP地址。
DB_PORT為當前數據庫實例的端口。
DB_NAME為要導入的數據庫名稱。
步驟 3 將導出的文件導入到關系型數據庫。
# psql --host=<RDS_ADDRESS> --port=<DB_PORT>--username=root--dbname=<DB_NAME>--file=<BACKUP_DIR>/backup.sql
RDS_ADDRESS為關系型數據庫實例的IP地址。
DB_PORT為當前數據庫實例的端口。
DB_NAME為要導入的目標數據庫名稱,請確保該數據庫已存在。
BACKUP_DIR為“backup.sql”所在目錄。
根據命令提示輸入關系型數據庫實例的密碼。
示例如下:
# psql --host=172.16.66.198 --port=5432 --username=root --dbname=my_db --file=backup.sql
Password for user root:
步驟 4 查看遷移結果,如下。
my_db=> \l my_db
示例中,名為my_db的數據庫已經被導入了:
my_db=> \l my_db
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------+-------+----------+-------------+-------------+-----------
my_db | root | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(1 row)----結束