我可以从WAL存档文件夹中安全删除哪些Postgresql WAL文件

und*_*ent 6 postgresql archiving wal

现在的情况

所以我在运行Postgres的数据记录计算机上将WAL归档设置为独立的内部硬盘.包含WAL档案的硬盘正在填满,我想将所有WAL档案文件(包括初始基本备份)删除并存档到外部备份驱动器.

目录结构如下:

D:/ WALBACKUP /是所有WAL文件的父文件夹(00000110000.CA00000004等)

D:/ WALBACKUP/BASEBACKUP /保存初始基本备份的.tar

我的问题是:

  • 除了当前的WAL归档文件(000000000001.CA0000 ..等)(包括基本备份),我可以安全地移动每个WAL文件,并将它们移动到另一个硬盘.(注意数据库是实时的并且正在接收数据)

干杯!

Cra*_*ger 14

WAL档案

您可以使用该pg_archivecleanup命令从存档(而不是 pg_xlog)中删除给定基本备份不需要的WAL .

一般来说,我建议使用PgBarman或类似工具来自动执行基本备份和WAL保留.它更容易,更不容易出错.

pg_xlog

切勿pg_xlog手动删除WAL .如果你有太多的WAL然后:

  • 你的wal_keep_segments设置是保持WAL;
  • archive_modearchive_command设定,但无法正常工作(检查日志);
  • checkpoint_segments是高得离谱,所以你只是产生太多的WAL; 要么
  • 你有一个复制槽(见pg_replication_slots视图)阻止删除WAL.

您应该解决导致WAL被保留的问题.如果在更改设置后似乎没有发生任何操作,请运行手动CHECKPOINT命令.

如果您有一个脱机服务器并且需要删除WAL才能启动它,您可以使用它pg_archivecleanup.它知道如何只删除服务器不需要的WAL ...但它可能会破坏基于存档的备份,流式副本等.所以除非必须,否则不要使用它.


Pat*_*ick 7

WAL文件是增量的,所以简单的答案是:你不能抛出任何文件.解决方案是进行新的基本备份,然后可以删除所有以前的WAL.

WAL文件包含修改表的单个语句,因此如果您丢弃一些较旧的WAL,则恢复过程将失败(它将无法以静默方式跳过丢失的WAL文件),因为无法可靠地恢复数据库的状态.您可以将WAL文件移动到其他位置而不会破坏WAL进程,但如果您需要从过去的某个时刻恢复数据库,则必须从单个位置再次使所有WAL文件可用; 如果你的磁盘空间不足那么这可能意味着从你有足够空间存储基本备份和所有WAL文件的某个位置恢复.这里的主要问题是,如果您能够在事件发生后以足够快的速度恢复完整数据库.

另一个问题是,如果您无法确定需要纠正的问题发生的位置/时间,则唯一的选择是从基本备份开始,然后重播所有WAL文件.这个过程并不困难,但如果你有一个旧的基本备份和许多要处理的WAL文件,这只需要很多时间.

对于您的情况,最佳方法是每x个月进行一次新的基本备份,并使用该基本备份收集WAL.每一个新的基础备份后,您可以删除旧的备份,随后的华尔兹或移动到便宜的离线存储(DVD,磁带等).在发生重大事件的情况下,您可以从最近的基本备份和从那时起收集的相对较少的WAL文件快速将数据库恢复到已知的正确状态.


Vio*_*rel 6

我们寻求的解决方案是每晚执行pg_basebackup。这将创建一个基础备份,稍后我们可以使用pg_archivecleanup在该基础之前使用以下方法清除所有“旧” WAL文件:

"%POSTGRES_INSTALLDIR%\bin\pg_archivecleanup" -d %WAL_backup_dir% %newestBaseFile%
Run Code Online (Sandbox Code Playgroud)

幸运的是,我们还没有恢复,但是它应该在理论上起作用。