乐辰科技网站建设求职设计师的个人简历模板
1、环境
centos 7系统
 postgresql 12
 docker 20.10.6
2、整体思路
1)进行一个pg+data目录的全量备份
2)通过wal日志恢复到故障发生之前某个时间点
3、操作步骤
配置postgresql.conf文件
#日志级别
wal_level = replica
#归档开关
archive_mode = on
#归档命令
archive_command = 'cp %p /home/archive/%f && echo %f >> /home/archive/archive.list' 
#用于指定pg_wal目录中保存的过去的wal文件(wal 段)的最小数量
wal_keep_segments=1024
 
重启pg
4、查看归档目录
此后数据库的操作都会记录wal日志文件到/home/archive目录下
ls /home/archive/
000000010000000000000001  000000010000000000000002  000000010000000000000003  000000010000000000000004  archive.list
 
如果归档目录中没有内容,需要执行强制日志归档命令
select pg_switch_wal();
 
如果还是没有,查看数据库日志
 如果报错cp:can not create XXX permission denied
 给创建的归档目录授权777 然后再次重启 并查看 日志 看该报错是否消失
 如果消失则再去查看归档目录 看是否有上面类似内容
 如果没有 则执行强制归档命令select pg_switch_wal();
chmod 777 /home/archive
 
5、使用pg_basebackup进行基础备份
pg_basebackup
/usr/local/pgsql/bin/pg_basebackup -h 127.0.0.1 -U postgres -p 5432 -Ft -Pv -Xf -z -Z5 -D /home/pgdata_bk 
备份完成后,对应备份目录会出现基础备份 是一个压缩包
准备试验数据
在2022-03-10 16:40:00 创建表dog 并随意插入几条数据
 等待适当时间,在16:43:00创建表cat 并随意插入几条数据
 恢复时间点 2022-03-10 16:42:00 (创建两张表之间的时间点就行)
 如果恢复后数据库中存在dog表,不存在cat表 则试验成功
模拟数据库故障
模拟数据库故障,停掉数据库
备份原来的data目录
cp -r _data data_bk  ##备份目录rm -rf _data/*   #删除原来data目录内容cp /home/pgdata_bk/base.tar.gz _data/  #将备份的压缩包复制到data目录中并解压
tar -zxvf base.tar.gzrm -rf base.tar.gz  #删除备份
 
修改postgresql.conf
设置归档命令和恢复时间点
 设置恢复时间点的时候要注意时区问题
restore_command = 'cp /home/archive/%f %p > /home/archive/recovery.log 2>&1  '
recovery_target_time = '2022-03-10 16:42:00'
 
添加空白文件recovery.signal文件
data目录添加文件 提醒postgresql要做recovery
touch recovery.signal
 
重启查看数据
查看数据是否符合预期
 恢复后的数据库为只读模式 需要执行
select pg_wal_replay_resume()
 
可能遇到的问题
1)pg_basebackup 操作FATAL: no pg_hba.conf entry for replication connection from host
