使用psql命令迁移PostgreSQL数据
迁移准备
PostgreSQL支持逻辑备份。您可使用pg_dump逻辑备份功能,导出备份文件,再通过psql导入到RDS中,实现将PostgreSQL的数据导入到关系型数据库中。
关系型数据库服务支持开启公网访问功能,通过弹性公网IP进行访问。您也可通过弹性云服务器的内网访问关系型数据库。
准备工作
导出数据
要将已有的PostgreSQL数据库迁移到关系型数据库,需要先对它进行导出。
- 相应导出工具需要与数据库引擎版本匹配。
- 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
- 登录已准备的弹性云服务器,或可访问关系型数据库的设备。
- 使用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为要迁移的数据库名称。
根据命令提示输入数据库密码。
示例如下:
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --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
导入数据
- 登录已准备的弹性云服务器,或可访问关系型数据库的设备。
- 确保导入的目标数据库已存在。
如果不存在,执行以下命令创建数据库:
# psql --host=<RDS_ADDRESS> --port=<DB_PORT> --username=root --dbname=postgres -c "create database <DB_NAME>;"- RDS_ADDRESS为RDS实例的IP地址。
- DB_PORT为当前数据库实例的端口。
- DB_NAME为要导入的数据库名称。
- 将导出的文件导入到关系型数据库。
# 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:
- 查看迁移结果,如下。
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)