逻辑备份PostgreSQL数据

您可以使用PostgreSQL自带的工具pg_dump将实例的数据进行逻辑备份,后续导出到本地保存。

背景信息

pg_dump是备份PostgreSQL数据库的工具,可用于备份单个数据库。更多详情,请参见pg_dump

前提条件

  • RDS PostgreSQL实例已设置白名单,允许ECS实例或本地主机的IP访问。

  • ECS实例或本地主机已安装和RDS PostgreSQL实例相同版本的PostgreSQL数据库。

    说明

    本文使用CentOS 7操作系统和PostgreSQL 15版本为例进行演示。

注意事项

建议使用高权限账号进行备份,避免出现权限不足的问题。

备份单个数据库

  1. 登录ECS实例或本地主机,使用如下命令备份目标数据库。

    pg_dump -h '<hostname>' -U <username> -p <port> -Fc <dbname> > <dumpdir>

    参数

    说明

    hostname

    RDS PostgreSQL实例连接地址。

    说明

    username

    RDS PostgreSQL实例高权限账号名称。

    port

    RDS PostgreSQL实例端口。

    -Fc

    输出格式。-Fc表示输出自定义格式的存档,这个格式适合通过pg_restore进行导入还原。更多选项的详细说明请参见pg_dump

    dbname

    目标数据库名称。

    dumpdir

    导出的备份文件路径及名称。

    示例

    pg_dump -h 'pgm-bpxxxxxx.pg.rds.aliyuncs.com' -U zht -p 5432 -Fc zht01 >  /tmp/testdb.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。

    您可执行ll /tmp/testdb.dump命令确认备份文件是否已成功生成。

    image.png

备份指定表

  1. 登录ECS实例或本地主机,使用如下命令备份目标数据库的指定表。

    pg_dump -h '<hostname>' -U <username> -p <port> -t <Schema>.<table> -Fc <dbname> > <dumpdir>

    参数

    说明

    hostname

    RDS PostgreSQL实例连接地址。

    说明

    username

    RDS PostgreSQL实例高权限账号名称。

    port

    RDS PostgreSQL实例端口。

    Schema

    备份表所在的Schema,默认为Public,如果表所在的Schema为Public,可省略。

    table

    需要备份的表。可以用多个-t <Schema>.<table>选择多个表。

    -Fc

    输出格式。-Fc表示输出自定义格式的存档,这个格式适合通过pg_restore进行导入还原。更多选项的详细说明请参见pg_dump

    dbname

    目标数据库名称。

    dumpdir

    导出的备份文件路径及名称。

    示例如下:

    pg_dump -h 'pgm-bpxxxxxx.pg.rds.aliyuncs.com' -U zht -p 5432 -t zhttest0808 -Fc zht01 > /tmp/testdb2.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。

    您可执行ll /tmp/testdb2.dump命令确认备份文件是否已成功生成。

    image.png

备份数据库时排除指定表

  1. 登录ECS实例或本地主机,使用如下命令备份目标数据库并排除指定表。

    pg_dump -h '<hostname>' -U <username> -p <port> -T <table> -Fc <dbname> > <dumpdir>

    参数

    说明

    hostname

    RDS PostgreSQL实例连接地址。

    说明

    username

    RDS PostgreSQL实例高权限账号名称。

    port

    RDS PostgreSQL实例端口。

    table

    需要排除的表。可以用多个-T <table>排除多个表。

    -Fc

    输出格式。-Fc表示输出自定义格式的存档,这个格式适合通过pg_restore进行导入还原。更多选项的详细说明请参见pg_dump

    dbname

    目标数据库名称。

    dumpdir

    导出的备份文件路径及名称。

    示例如下:

    pg_dump -h 'pgm-bpxxxxxx.pg.rds.aliyuncs.com' -U zht -p 5432 -T zhttest0808 -Fc zht01 > /tmp/testdb3.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。

    您可执行ll /tmp/testdb3.dump命令确认备份文件是否已成功生成。

    image.png

备份数据库模式(不备份数据)

  1. 登录ECS实例或本地主机,使用如下命令备份目标数据库模式。

    pg_dump -h '<hostname>' -U <username> -p <port> -s -Fc <dbname> > <dumpdir>

    参数

    说明

    hostname

    RDS PostgreSQL实例连接地址。

    说明

    username

    RDS PostgreSQL实例高权限账号名称。

    port

    RDS PostgreSQL实例端口。

    -s

    仅备份数据库模式,不备份数据。更多选项的详细说明请参见pg_dump

    -Fc

    输出格式。-Fc表示输出自定义格式的存档,这个格式适合通过pg_restore进行导入还原。更多选项的详细说明请参见pg_dump

    dbname

    目标数据库名称。

    dumpdir

    导出的备份文件路径及名称。

    示例如下:

    pg_dump -h 'pgm-bpxxxxxx.pg.rds.aliyuncs.com' -U zht -p 5432 -s -Fc zht01 > /tmp/testdb4.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。

    您可执行ll /tmp/testdb4.dump命令确认备份文件是否已成功生成。

    image.png

相关文档

如果数据库出现异常需要恢复数据,请参见使用pg_restore恢复逻辑备份文件数据