首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >archive_cleanup_command不清除归档的wal文件

archive_cleanup_command不清除归档的wal文件
EN

Stack Overflow用户
提问于 2020-11-16 02:26:41
回答 1查看 1.9K关注 0票数 1

主要问题:

archive_cleanup_command在postgresql.conf文件中不清除归档的wal文件。我怎样才能让它清除存档的wal文件?

相关信息:

  • My是Linux,ubuntuv18.04lts.
  • 数据库是Postgresql版本13

当前设置:

/etc/postgresql/13/main/postgresql.conf文件:

代码语言:javascript
运行
复制
wal_level = replica
wal_compression = on

wal_recycle = on
checkpoint_timeout = 5min

max_wal_size = 1GB
min_wal_size = 80MB

archive_mode = on
archive_command = 'pxz --compress --keep --force -6 --to-stdout --quiet %p > /datadrive/postgresql/13/wal_aerchives/%f.xz'

archive_timeout = 10min

restore_command = 'pxz --decompress --keep --force -6 --to-std-out --quiet /datadrive/postgresql/13/wal_archives/%f.xz > %p'

archive_cleanup_command = 'pg_archivecleanup -d -x .xz /datadrive/postgresql/13/wal_archives %r >> /datadrive/postgresql/13/wal_archives/archive_cleanup_command.log 2>&1'

archive_cleanup_command.log拥有777个权限。

我有一个主数据库使用发布执行逻辑复制,而订阅该发布的从数据库执行逻辑复制。这是奴隶,我打算做归档和恢复点。

,我期待发生什么事?

postgresql.conf文件中的检查点超时设置意味着至少每5分钟就会创建一个重新启动点。archive_timeout设置为10分钟意味着postgresql在每10分钟之后强制一个日志文件段切换。因此,至少每10分钟就会创建一个重新启动点。每当创建重新启动点时,都会运行归档清理命令。当运行此命令时,它将清除所有比重新启动点更早的.xz文件。因此,wal_archives目录不应该有超过20分钟甚至2小时的.xz文件.

到底发生了什么?

  • /datadrive/postgresql/13/wal_archives目录堆积如山,有许多从未被清除的.xz文件。

  • cat archive_cleanup_command.log显示一个空文件。没有什么东西是写给它的。--

当我通过bash手动运行

  • 命令时,它可以工作(即在指定的文件之前清除所有存档文件,cat archive_cleanup_command显示已清除的文件。

示例:

/datadrive/postgresql/13/wal_archives/archive_cleanup_command.log pg_archivecleanup -d -x .xz /datadrive/postgresql/13/wal_archives 000000010000045E0000E5 >> 2>&1

然后运行cat archive_cleanup_command.log会给出如下结果:

保留WAL文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000E5“和更高版本的pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000DE.xz”pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000DF.xz“pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000E0.xz”pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000E1.xz“pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000E2.xz“pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000E3.xz”pg_archivecleanup:删除文件"/datadrive/postgresql/13/wal_archives/000000010000045E000000E4.xz"

我试过什么?

  • I尝试了各种权限设置(例如: chmod 777 wal_archive目录,将其他用户添加到postgres组等)

  • 广泛而彻底地阅读了postgresql文档,并查看了至少20个相关的堆栈溢出帖子。

  • 最初尝试了7 7zip cmd行工具来代替pxz.

进行压缩。

  • Successfully使用以下命令多次重新启动数据库:

systemctl停止postgresql@13-主sudo systemctl启动postgresql@13-main

  • 删除逻辑复制,并在主服务器上重新创建发布,并在从服务器上重新创建订阅。

  • 在主服务器上启用了检查点。

  • 看着/var/log/postgresql/postgresql-13-main.log。不幸的是,在这个日志中没有出现相关的错误.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 06:42:14

Restartpoints、restore_commandarchive_cleanup_command只适用于流复制(“物理”)复制,或一般情况下的恢复,而不适用于逻辑复制。

逻辑复制待机不在恢复中,而是打开以供读取和写入。在这种状态下,像archive_cleanup_command这样的恢复设置将被忽略。

您将不得不找到另一种机制来删除旧的WAL档案,最好是与备份解决方案相结合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64851938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档