PostgreSQL 内置备份工具全解析:pg_dump、pg_dumpall 与 pg_basebackup的区别与用法

1 概述

PostgreSQL 数据库因其强大的功能和可靠性被广泛应用于各类业务场景,而数据备份是数据库运维中至关重要的一环。PostgreSQL 提供了多种内置的备份工具,包括 pg_dump、pg_dumpall和 pg_basebackup ,它们在不同的备份策略和恢复场景下发挥着关键作用。本文将详细介绍这三种工具的区别以及其具体使用方法。

2 工具

2.1 pg_dump:

pg_dump 是一个用于创建数据库或特定模式逻辑备份的命令行工具。它生成 SQL 脚本,包含创建表结构、插入数据及相关的权限设置等信息。这种备份方式不依赖于底层文件系统的细节,易于移植到其他系统环境。

  • 用法示例
pg_dump -U your_user_name -F c -b -v -h localhost -p 5432 your_database > backup.sql
-U your_user_name 指定执行备份操作的用户名。
-F c 表示以定制格式(custom format)进行备份,这是一种压缩且高效的二进制格式。
-b 包含事务块开始点,以便于一致性的恢复。
-v 开启详细输出模式。
-h localhost 和 -p 5432 分别指定了服务器地址和端口。
your_database 是要备份的数据库名。

2.2 pg_dumpall:全局级别的逻辑备份工具

pg_dumpall 是一个全局级别的逻辑备份工具,它可以生成当前 PostgreSQL 实例中所有数据库的 SQL 脚本,包括用户、角色、表空间、权限设置以及所有数据库的数据和结构

  • 用法示例:
pg_dumpall -U postgres -h localhost -p 5432 -f backup.sql
常用选项包括:
-U <用户名> 或 --username=<用户名>
    指定连接到数据库时使用的用户名。
-h <主机名> 或 --host=<主机名>
    指定 PostgreSQL 服务器的主机名或 IP 地址,默认为本地主机(localhost)。
-p <端口号> 或 --port=<端口号>
    指定 PostgreSQL 服务器监听的端口号,默认为 5432。
-W 或 --password
    在提示下输入数据库用户的密码。如果你希望非交互式运行,可以使用环境变量或者 `.pgpass` 文件来避免手动输入密码。
-f <文件名> 或 --file=<文件名>
    指定输出备份文件的名称,例如:`-f all_databases_backup.sql`。
-F <格式>
    指定备份文件的格式,对于 pg_dumpall 来说,默认和推荐的格式是 `plain` SQL 格式。
--clean
    在备份脚本开始处添加删除数据库对象的命令,以便在恢复前清理目标数据库。
--globals-only
    只导出全局对象(如角色、表空间等),不导出任何数据库的内容。

2.3 pg_basebackup:物理备份工具

pg_basebackup 则是一个用于制作数据库集群物理备份的工具,它会生成一个完整的数据库集群副本,包括所有数据文件、WAL 文件和其他必要文件。这种备份方式更利于快速恢复,并支持流复制初始化从库。

  • 用法示例
pg_basebackup -D /path/to/backup -U replication_user -h primary_host -p 5432 -X stream
-D /path/to/backup 设置备份的目标目录。
-U replication_user 使用具有复制权限的用户连接主库。
-h primary_host 和 -p 5432 指定主库的地址和端口。
-X stream 使用流复制方式获取 WAL 日志。

3 附录

3.1 pg_dump和pg_dumpall的区别

pg_dump:
功能:pg_dump 是一个逻辑备份工具,它能够生成特定数据库或其内部部分(如单个模式、表等)的 SQL 脚本。这个脚本包含了创建表结构、索引、视图、存储过程以及数据内容的 SQL 命令。
用法:你可以精确指定要备份哪个数据库或者哪些对象,适用于只备份一部分数据库的需求。
特点:由于是逻辑备份,pg_dump 可以跨不同的 PostgreSQL 版本进行恢复,并且易于在其他服务器上重建数据库,即使目标服务器的硬件或文件系统架构不同。
pg_dumpall:
功能:pg_dumpall 则是一个全局级别的逻辑备份工具,它可以生成当前 PostgreSQL 实例中所有数据库的 SQL 脚本,包括用户、角色、表空间、权限设置以及所有数据库的数据和结构。
用法:当你需要一次性备份整个 PostgreSQL 集群的所有数据库时使用 pg_dumpall,而不仅仅是单一数据库。
特点:除了各个数据库的内容外,pg_dumpall 还会导出全局的对象定义,这对于迁移整个集群到新的服务器或环境非常有用,因为恢复时可以确保所有的系统级设置也被复制到位。

总结来说:当你需要针对单一数据库或数据库内部分对象进行精细备份时,选择 pg_dump。
当你需要对整个 PostgreSQL 集群进行全面备份,包含所有数据库及其相关的全局对象时,选择 pg_dumpall。

码字不易,喜欢本文请点赞。

你可能感兴趣的:(postgresql,数据库)