039.PGSQL-备份和恢复-增量备份-开启wal归档、并设置定时清理备份之后的wal文件

摘要:
启用WAL归档方法1)在第1天之前归档文件。配置文件参数设置[root@s101/var/lib/pgsql/13/data]#nanopostgresql。confwal_level=replica#minimal,replica,orlogicalarchive_mode=on#enablesarchiving;off,on,oralwaysarchive_command='/bin/bash/var/lib/pgsql/13/scripts/pgarchive。sh%p%f'#commandtousetoarchivelogfilesegment#占位符:%p=pathofieltoarchive#%f=filenameonly#例如'test!-F/mnt/server/archivedir/%F&&cp%p/mnt/server/archivedir:%F'2.存档执行脚本pg_Archive。什[root@s101/var/lib/pgsql/13/scripts]#catpg_存档。sh#!-f/var/lib/pgsql/13/archive_wals/%f&&cp%p/var/lib/pgsql/13/aArchive_wals/%f'#重新启动数据库sudoystelctlrestartpostgresql-13描述:配置参数wal_level、archive_模式需要重新启动数据库archive_命令不需要重新启动该数据库。您可以重新加载配置文件selectpg,方法是重新加载selectpg();View archive_ commandshowarchive_ Command启用定时清理pg_ Archivecleanup--清理PostgreSQLWAL归档文件修改配置文件postgresql。conarchive_cleanup_command='/bin/bash/var/lib/pgsql/13/scripts/pg_Archivecleanup。sh%r2˃˃/var/lib/pgsql/13/scripts/cleanup。log'执行脚本[root@s101/var/lib/pgsql/13/scripts]#nanopg_archivecleanup。sh#!从pg_ls_waldir()中选择count(*);从pg_ls_waldir()中选择count(*)*16作为“文件大小”;查看运行日志showlo的相关配置

备份:

sql转储备份

文件系统级别备份

连续归档-增量备份和基于时间点恢复(PITR)

物理备份:将数据目录,参数文件拷贝出来

逻辑备份:将数据库对象导出到文件

冷备份:数据库关闭情况下

热备份:数据库启动情况下

RTO 恢复时间目标  故障发生到恢复所需时间

RPO 恢复点目标   可容忍丢失多少数据

 一、增量备份

定期对数据库做基础备份,再配合WAL的归档日志,可实现再较短时间将数据库恢复

 参考

https://blog.csdn.net/qq_43303221/article/details/88224272

https://blog.csdn.net/weixin_39520204/article/details/112237317?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.control&spm=1001.2101.3001.4242

 开启WAL 归档

创建归档目录

039.PGSQL-备份和恢复-增量备份-开启wal归档、并设置定时清理备份之后的wal文件第1张

[root@s101 /var/lib/pgsql/13]#ls

archive_wals

backups

scripts

wal归档 记录  touch  pg_archive_logs

[root@s101 /var/lib/pgsql/13/archive_wals]#cat  pg_archive_logs
the old backup file not exists!

开启WAL 归档

方法1)按天一个文件wal归档

1.配置文件参数设置

[root@s101 /var/lib/pgsql/13/data]#nano postgresql.conf

wal_level = replica

# minimal, replica, or logical


archive_mode = on             

# enables archiving; off, on, or always


archive_command = '/bin/bash /var/lib/pgsql/13/scripts/pg_archive.sh %p %f'

  # command to use to archive a logfile segment
  # placeholders: %p = path of file to archive
  # %f = file name only
  # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'

2.归档执行脚本 

pg_archive.sh

[root@s101 /var/lib/pgsql/13/scripts]#cat pg_archive.sh

#!/bin/bash
source /var/lib/pgsql/.bash_profile

DATE=`date +%Y%m%d`
DIR="/var/lib/pgsql/13/archive_wals/$DATE"
BACK="/var/lib/pgsql/13/archive_wals/"`date -d '-20 day' +%Y%m%d`
if [ -d "$BACK" ]; then
                rm -rf $BACK
                echo "success rm $BACK" > /var/lib/pgsql/13/archive_wals/pg_archive_logs
        else
                echo "the old backup file not exists!" > /var/lib/pgsql/13/archive_wals/pg_archive_logs
fi

(test -d $DIR || mkdir -p $DIR) && cp $1 $DIR/$2

方法二)归档文件放在一个文件中(目前使用的方法)

1.配置文件参数设置

[root@s101 /var/lib/pgsql/13/data]#nano postgresql.conf


wal_level = replica # minimal, replica, or logical

archive_mode = on               # enables archiving; off, on, or always

#读取命令方式
archive_command ='test ! -f /var/lib/pgsql/13/archive_wals/%f && cp %p /var/lib/pgsql/13/archive_wals/%f'
#重新启动数据库
sudo systemctl restart postgresql-13

说明:配置参数

wal_level 、 archive_mode 需要重启数据库
archive_command  不需要重启数据库,只需要再次加载就可以

reload配置文件

select pg_reload_conf();

查看 archive_command 

show archive_command

039.PGSQL-备份和恢复-增量备份-开启wal归档、并设置定时清理备份之后的wal文件第2张

 开启定时清理 -pg_archivecleanup — 清理PostgreSQL WAL 归档文件

修改配置文件 postgresql.conf

archive_cleanup_command = '/bin/bash /var/lib/pgsql/13/scripts/pg_archivecleanup.sh %r 2>>/var/lib/pgsql/13/scripts/cleanup.log'

执行脚本

[root@s101 /var/lib/pgsql/13/scripts]#nano pg_archivecleanup.sh

#!/bin/bash

ARCHIVEDIR='/var/lib/pgsql/13/archive_wals/'
CHKPOINT=$(find $ARCHIVEDIR -type f -mtime +3 -name '*backup' -printf '%f
' | sort -r | head -1)
cd $ARCHIVEDIR
/usr/pgsql-13/bin/pg_archivecleanup  -x .00000028.backup  $ARCHIVEDIR $CHKPOINT

find $ARCHIVEDIR -type f -mtime +1 -a -name '*backup' -a ! -newer $CHKPOINT -delete

find -mtime 说明 https://www.cnblogs.com/star521/p/15090194.html

常用命令 

 查看数据目录 show data_directory;

 是否开启归档 show archive_mode; 

--查看日志目录所有文件select * from pg_ls_logdir();

--查看/data目录下的文件select pg_ls_dir('/data');

输出数据库WAL目录的所有文件

--输出文件总大小,单位是byte   select sum(size) from pg_ls_waldir();    select sum(size)/1024/1024   as  "文件大小(M)"   from pg_ls_waldir(); 

--查看WAL文件数量,单个wal日志文件大小默认为16MB。 select count(*) from pg_ls_waldir();     select count(*)*16  as "文件大小(M)"    from pg_ls_waldir();

039.PGSQL-备份和恢复-增量备份-开启wal归档、并设置定时清理备份之后的wal文件第3张

查看运行日志的相关配置

show logging_collector;--启动日志收集

show log_directory;--日志输出路径

show log_filename;--日志文件名

show log_truncate_on_rotation;--当生成新的文件时如果文件名已存在,是否覆盖同名旧文件名

show log_statement;--设置日志记录内容

show log_min_duration_statement;--运行XX毫秒的语句会被记录到日志中,-1表示禁用这个功能,0表示记录所有语句,类似mysql的慢查询配置

查询当前lsn  (log sequence number)

--1、用到哪些方法select proname from pg_proc where proname like 'pg_%_lsn';proname--------------------------------- pg_current_wal_flush_lsn pg_current_wal_insert_lsn pg_current_wal_lsn pg_last_wal_receive_lsn pg_last_wal_replay_lsn

--2、查询当前的lsn值select pg_current_wal_lsn();

--3、查询当前lsn对应的日志文件select pg_walfile_name('2/81872298');

--4、查询当前lsn在日志文件中的偏移量SELECT * FROM pg_walfile_name_offset(pg_current_wal_lsn());

免责声明:文章转载自《039.PGSQL-备份和恢复-增量备份-开启wal归档、并设置定时清理备份之后的wal文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇keepalived日志YAML 模板文件语法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java数据库连接池

    当你的网站访问量很大的时候,数据库服务器在每一次连接时创建一次数据库连接,这样就浪费了很多的数据库资源,并且容易造成该数据库服务器内存溢出。数据库作为网站的核心模块,它的性能影响到了战歌网站的性能,数据库连接池可以解决这个问题:数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是新建立一个。 import...

linux 下 奇怪的 动态库 依赖问题

 转:http://fanwei51880.blog.163.com/blog/static/3240674020111145285375/   总结如下:1)当你在编译生成静态库的时候, 只需要相应的依赖库库的头文件即可. 只有在你想生成so,或可执行文件 时, 才需要lib库.   对于你没有用到的lib, 但是不包含又编译失败, 那么只包含其头文件即...

Oracle 字符集的查看和修改

一、什么是Oracle字符集        Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响Oracle数据库字符集最重要的参数是NLS_LANG参...

C#实体类对应SQL数据库的自增长ID怎么设置?

/// <summary> ///自增长ID /// </summary> [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //若数据库设置自增长,要加这个,不然无法更新修改状态 pu...

js循环读取table里面的数据

var tb=document.getElementById("tableId"); //获取table对像 var rows=tb.rows; for(var i=0;i<rows.length;i++){ //--循环所有的行 var cells=rows[i].cells; fo...

[转]如何利用ndk-stack工具查看so库的调用堆栈【代码示例】?

如何利用ndk-stack工具查看so库的调用堆栈【代码示例】? http://hi.baidu.com/subo4110/item/d00395b3bf63e4432bebe36d Step1:Android应用主文件:CPPTestActivity.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18...