面试题答案
一键面试备份策略
- 物理备份
- 定期全量物理备份:使用pg_basebackup工具进行全量物理备份。例如,在业务低峰期(如凌晨2 - 4点)执行pg_basebackup -h primary_host -U backup_user -D /backup_path -Ft -P命令。 -Ft参数表示以tar格式输出, -P参数显示备份进度。这样可以获取数据库某一时刻的完整物理文件状态,包括数据文件、日志文件等,确保数据的完整性。
- 持续的日志归档:开启PostgreSQL的日志归档模式。在postgresql.conf文件中设置wal_level = replica,archive_mode = on,archive_command = 'cp %p /archive_path/%f'。这样,主库产生的WAL(Write - Ahead Log)日志会被持续归档到指定路径,为基于时间点恢复(Point - in - Time Recovery, PITR)提供基础。
- 逻辑备份
- 定期逻辑全量备份:使用pg_dump工具进行全量逻辑备份。例如,执行pg_dump -h primary_host -U backup_user -Fc -f /backup_path/full_backup.dump database_name, -Fc参数表示以自定义格式输出,这种格式可以加快恢复速度。逻辑全量备份可以用于重建数据库结构和数据,适合在不同版本或不同操作系统间迁移数据。
- 增量逻辑备份:可以基于触发器和应用层日志来实现逻辑增量备份。例如,在应用中记录数据的变更,然后在备份时只备份这些变更的数据。也可以使用第三方工具如pg_rman来实现基于WAL日志的逻辑增量备份。
恢复流程
- 基于物理备份恢复
- 全量恢复:如果是灾难性故障,需要从全量物理备份恢复。首先停止PostgreSQL服务,将备份文件解压到数据目录(如tar -xf full_backup.tar -C /data_path),然后修改recovery.conf(或postgresql.auto.conf)文件,配置恢复源为归档日志路径,启动PostgreSQL服务,数据库会从备份点开始重放归档日志,恢复到故障前的状态。
- 基于时间点恢复(PITR):对于误操作等场景,可利用全量物理备份和归档日志进行PITR。先从全量物理备份恢复,然后在recovery.conf文件中设置recovery_target_time = 'YYYY - MM - DD HH:MM:SS'指定恢复到的时间点,启动服务后数据库会重放日志直到指定时间点。
- 基于逻辑备份恢复
- 全量逻辑恢复:使用pg_restore工具恢复全量逻辑备份。例如,pg_restore -h target_host -U restore_user -d target_database /backup_path/full_backup.dump。它会按照备份文件中的记录重建数据库结构和数据。
- 增量逻辑恢复:如果有增量逻辑备份,先恢复全量逻辑备份,然后再按照顺序恢复增量逻辑备份。
技术要点
- 备份协调:物理备份和逻辑备份的时间点要协调好,避免在逻辑备份时物理备份正在进行导致数据不一致。可以在逻辑备份前暂停物理备份的日志归档一小段时间,确保逻辑备份的一致性。
- 备份存储:备份数据要存储在可靠的存储介质上,如磁盘阵列、磁带库等。并且要有异地存储,防止本地存储故障导致备份数据丢失。
- 高可用架构适配:在高可用架构中,物理备份可以在备库上进行,减少对主库的性能影响。逻辑备份也可以在备库上操作,但要注意备库数据的同步延迟,确保备份数据的时效性。
- 测试恢复:定期进行恢复测试,确保备份数据可用。恢复测试可以在测试环境中模拟各种故障场景,验证备份策略和恢复流程的有效性。