使用psql命令迁移FlexusRDS for PostgreSQL数据
迁移准备
FlexusRDS for PostgreSQL支持开启公网访问功能,通过弹性公网IP进行访问。您也可以通过Flexus云服务器X实例的内网访问FlexusRDS for PostgreSQL。
- 准备Flexus云服务器X实例或可通过公网访问FlexusRDS for PostgreSQL实例的设备。
通过公网地址连接FlexusRDS for PostgreSQL实例,需要对实例绑定弹性公网IP。
- 在准备Flexus云服务器X实例或可访问FlexusRDS for PostgreSQL的设备上,安装和FlexusRDS for PostgreSQL相同版本的PostgreSQL客户端。
PostgreSQL数据库或客户端会自带pg_dump和psql工具。
导出数据
要将已有的PostgreSQL数据库迁移到FlexusRDS for PostgreSQL,需要先对它进行导出。
- 相应导出工具需要与数据库引擎版本匹配。
- 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
- 登录已准备的Flexus云服务器X实例,或可访问FlexusRDS for 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为要迁移的数据库名称。
根据命令提示输入数据库密码。
导出的SQL文件为INSERT语句时可以更容易地编辑和手动修改,但是导入数据的速度可能会比使用COPY语句慢一些,建议根据实际情况选择导出合适的语句格式。
- 若源库和目标库都使用PostgreSQL数据库,建议导出COPY语句(默认),参考•示例一:导出源数据库至SQL文件(COPY语句...。
- 若源库或目标库使用了非PostgreSQL数据库,建议导出INSERT语句,参考•示例二:导出源数据库至SQL文件(INSERT...。
更多使用,请参见pg_dump选项说明。
示例如下:
- 示例一:导出源数据库至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
- 使用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
导入数据
- 登录已准备的Flexus云服务器X实例,或可访问FlexusRDS for PostgreSQL的设备。
- 确保导入的目标数据库已存在。
如果不存在,执行以下命令创建数据库:
# psql --host=<RDS_ADDRESS>--port=<DB_PORT>--username=root--dbname=postgres-c "create database<DB_NAME>;"- RDS_ADDRESS为RDS实例的IP地址。
- DB_PORT为当前数据库实例的端口。
- DB_NAME为要导入的数据库名称。
- 将导出的文件导入到FlexusRDS for PostgreSQL。
# 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)