美河学习在线 www.eimhe.com
PostgreSQL 备份恢复
前言
1、 设置 WAL 日志归档
为持久保存日志文件,需要开启日志归档模式。
在该模式下,可丢弃日志文件被删除前,被拷贝到指定目录。在 postgres.conf 配置文件中
设置三个参数:
wal_level=replica 或更高
archive_mode = on
archive_command = 'cp %p /mnt/server/archivedir/%f'
%p 表示 pg_wal 目录路径和日志文件名
%f 表示日志文件名。
日志被拷贝到/mnt/server/archivedir 目录
日志的归档过程如下:
checkpoint 操作中,当一个日志文件 X 可被覆盖时,在 pg_wal 的 archive_status 目中生成
X.ready 文件。
后台 archive 进程负责日志文件的拷贝。该进程监控 archive_status 目录,当发现有 X.ready
文件名后,使用 archive_command 拷贝文件,并将 X.ready 命名为 X.done
下一次 checkpoint 操作中,将 archive_status 目中 X.done 对应的 X 日志文件改名。
2、数据库的状态
DB_SHUTDOWNED(数据库正常关闭)
DB_SHUTDOWNED_IN_RECOVERY(数据库在恢复时关闭)
DB_SHUTDOWNING(数据库正常关闭过程中崩溃)
DB_IN_CRASH_RECOVERY(数据库在恢复过程中崩溃)
DB_IN_ARCHIVE_RECOVERY(数据库处于归档恢复)
DB_IN_PRODUCTION(数据库处于正常工作状态,等待接受事务处理)
crash recovery
PostgreSQL 正常运行中,直接 kill 主进程,重启 PostgreSQL,将进入 crash recovery 处理流
程,即 Oracle 的实例恢复,从 control 文件中 checkpoint 的 redo lsn 位置开始,使用 pg_wal
目录中的日志文件进行恢复。PostgreSQL 能进行上述处理,是因为将其状态和最近的
checkpoint 记录在在 control 文件中。
⚫ 初始化数据库后,control 文件 DB 状态初始值为 shutdown。
⚫ pg 启动时,当 control 文件 DB 状态为 shutdown,则将状态设置为 production,退出
恢复过程。
⚫ 在正常关闭服务时,执行 checkpoint,并将 control 文件 DB 态设置 shutdown。
⚫ pg 启动时,当 control 文件 DB 状态为 production,则说明发生了从 control 文件读
取最近 checkpoint,从 redo lsn 开始进行恢复,恢复完成后,将状 production 实验示
例
评论