华为云云数据库rds使用psql命令迁移RDS for PostgreSQL数据_云淘科技
迁移准备
PostgreSQL支持逻辑备份。您可使用pg_dump逻辑备份功能,导出备份文件,再通过psql导入到RDS中,实现将PostgreSQL的数据导入到云数据库RDS中。
云数据库RDS服务支持开启公网访问功能,通过弹性公网IP进行访问。您也可通过弹性云服务器的内网访问云数据库RDS。
准备工作
准备弹性云服务器或可公网访问云数据库RDS。
通过弹性云服务器连接云数据库RDS实例,需要创建一台弹性云服务器。
通过公网地址连接云数据库RDS实例,需具备以下条件。
先对云数据库RDS实例绑定公网地址,如何绑定公网地址,请参见绑定弹性公网IP。
保证本地设备可以访问云数据库RDS绑定的公网地址。
在1中的弹性云服务器或可访问云数据库RDS的设备上,安装PostgreSQL客户端。
请参见如何安装PostgreSQL客户端。
该弹性云服务器或可访问云数据库RDS的设备上需要安装和RDS for PostgreSQL数据库服务端相同版本的数据库客户端,PostgreSQL数据库或客户端会自带pg_dump和psql工具。
导出数据
要将已有的PostgreSQL数据库迁移到云数据库RDS,需要先对它进行导出。
相应导出工具需要与数据库引擎版本匹配。
数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
登录已准备的弹性云服务器,或可访问云数据库RDS的设备。
使用pg_dump将源数据库导出至SQL文件。
pg_dump–username= –host= –port= –format=plain –file=
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= –host= –port= –format=plain –file= –table= DB_USER为数据库用户。 根据命令提示输入数据库密码。 示例如下: 示例一:导出源数据库中指定的单表至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的设备。 如果不存在,执行以下命令创建数据库: # psql –host=–port=<DB_PORT>–username=root–dbname=postgres-c “create database;” RDS_ADDRESS为RDS实例的IP地址。 将导出的文件导入到云数据库RDS。 # psql –host= –port=<DB_PORT>–username=root–dbname=–file=/backup.sql RDS_ADDRESS为云数据库RDS实例的IP地址。 根据命令提示输入云数据库RDS实例的密码。 示例如下: # 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的数据库已经被导入了: 父主题: 数据库迁移 同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851) 内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
DB_ADDRESS为数据库地址。
DB_PORT为数据库端口。
BACKUP_FILE为要导出的文件名称。
DB_NAME为要迁移的数据库名称。
TABLE_NAME为要迁移的数据库中指定表名称。[rds@localhost ~]$ ll backup.sql
-rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql
导入数据
确保导入的目标数据库已存在。
DB_PORT为当前数据库实例的端口。
DB_NAME为要导入的数据库名称。
DB_PORT为当前数据库实例的端口。
DB_NAME为要导入的目标数据库名称,请确保该数据库已存在。
BACKUP_DIR为“backup.sql”所在目录。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)