文档首页 > > 用户指南> PostgreSQL用户指南> 数据迁移>

使用psql命令迁移PostgreSQL数据

使用psql命令迁移PostgreSQL数据

分享
更新时间:2021/01/16 GMT+08:00

迁移准备

PostgreSQL支持逻辑备份。您可使用pg_dump逻辑备份功能,导出备份文件,再通过psql导入到RDS中,实现将PostgreSQL的数据导入到云数据库RDS中。

云数据库RDS服务支持开启公网访问功能,通过弹性公网IP进行访问。您也可通过弹性云服务器的内网访问云数据库RDS

准备工作

  1. 准备弹性云服务器或可公网访问云数据库RDS
    • 通过弹性云服务器连接云数据库RDS实例,需要创建一台弹性云服务器

      创建并连接弹性云服务器,请参见如何创建和连接ECS

    • 通过公网地址连接云数据库RDS实例,需具备以下条件。
      1. 先对云数据库RDS实例绑定公网地址,如何绑定公网地址,请参见绑定弹性公网IP
      2. 保证本地设备可以访问云数据库RDS绑定的公网地址。
  2. 1中的弹性云服务器或可访问云数据库RDS的设备上,安装PostgreSQL客户端。

    请参见如何安装PostgreSQL客户端

    弹性云服务器或可访问云数据库RDS的设备上需要安装和RDS PostgreSQL数据库服务端相同版本的数据库客户端,PostgreSQL数据库或客户端会自带pg_dump和psql工具。

导出数据

要将已有的PostgreSQL数据库迁移到云数据库RDS,需要先对它进行导出。

  • 相应导出工具需要与数据库引擎版本匹配。
  • 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
  1. 登录已准备的弹性云服务器,或可访问云数据库RDS的设备。
  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为要迁移的数据库名称。

    根据命令提示输入数据库密码。

    示例如下:

    $ 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

导入数据

通过弹性云服务器或可访问云数据库RDS的设备,用相应客户端连接云数据库RDS实例,将导出的SQL文件导入到云数据库RDS

  1. 确保导入的目标数据库已存在。

    如果不存在,执行以下命令创建数据库:

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --username=root --dbname=postgres -c "create database <DB_NAME>;"
    • RDS_ADDRESS为RDS实例的IP地址。
    • DB_PORT为当前数据库实例的端口。
    • DB_NAME为要导入的数据库名称。

  2. 将导出的文件导入到云数据库RDS

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --username=root --dbname=<DB_NAME> --file=<BACKUP_DIR>/backup.sql

    • RDS_ADDRESS为云数据库RDS实例的IP地址。
    • DB_PORT为当前数据库实例的端口。
    • DB_NAME为要导入的目标数据库名称,请确保该数据库已存在。
    • BACKUP_DIR为“backup.sql”所在目录。

    根据命令提示输入云数据库RDS实例的密码。

    示例如下:

    # psql --host=172.16.66.198 --port=5432 --username=root --dbname=my_db --file=backup.sql

    Password for user root:

  3. 查看迁移结果,如下。

    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)

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问