面试题答案
一键面试准备工作
- 确认数据库状态:确保数据库运行正常且没有未完成的事务或异常情况。作用是保证备份的完整性。可能遇到的问题是数据库存在故障,如磁盘空间不足、进程异常等,需提前排查解决。
- 检查配置文件:确认
postgresql.conf
中的相关参数,如wal_level
需设置为replica
或logical
,以确保归档日志功能可用。这是为后续基于归档日志恢复做准备。若未正确设置,可能导致无法进行基于时间点的恢复(PITR)。 - 创建备份目录:在备份目标服务器上创建用于存放备份文件的目录,并确保 PostgreSQL 服务对该目录有读写权限。作用是为备份文件提供存储位置。可能问题是权限设置不当,导致无法写入备份文件。
备份步骤
- 启动备份:在 PostgreSQL 数据库中执行
pg_start_backup('label', true)
函数,其中label
是备份的标签,用于标识该备份,第二个参数true
表示允许在备份过程中进行并发读写操作。此步骤标记备份开始,记录起始 LSN(日志序列号),并确保后续 WAL 日志归档。可能遇到的问题是函数执行失败,如权限不足或数据库处于不允许备份的状态。 - 复制数据文件:将数据库的数据目录(通常为
PGDATA
)中的所有数据文件复制到备份目标目录。这些数据文件包含数据库的实际数据。可能会遇到磁盘空间不足、文件复制过程中出错(如网络问题导致异地复制失败)等情况。 - 获取 WAL 日志:获取备份开始到备份结束期间生成的 WAL 日志文件。这些日志文件用于在恢复时重演备份后的事务。可能遇到 WAL 日志归档配置错误,导致无法获取完整的 WAL 日志。
- 停止备份:执行
pg_stop_backup()
函数,标记备份结束,记录结束 LSN。此步骤确保备份的一致性。若执行失败,可能导致备份不完整,影响后续恢复操作。
备份验证
- 检查备份文件完整性:验证复制的数据文件和 WAL 日志文件是否完整,没有损坏或丢失。例如,可以通过计算文件的校验和(如 MD5、SHA1 等)与源文件对比。若文件损坏,可能导致恢复失败。
- 测试恢复:在测试环境中尝试使用备份进行恢复操作,确保能够成功恢复到备份时的状态。若恢复失败,需排查备份过程中的问题,如数据文件复制错误、WAL 日志缺失等。