主要问题:
postgresql.conf 文件中的 archive_cleanup_command 不会清除归档的 wal 文件。我怎样才能让它清除存档的 wal 文件?
相关信息:
- 我的操作系统是 Linux,Ubuntu v18.04 LTS。
- 数据库是 Postgresql 版本 13
我当前的设置:
/etc/postgresql/13/main/postgresql.conf 文件:
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 分钟创建一个重启点。并且 10 分钟的 archive_timeout 设置意味着 postgresql 每 10 分钟强制执行一次日志文件段切换。因此,至少每 10 分钟创建一个重启点。每当创建重新启动点时,就会运行归档清理命令。运行此命令时,它将清除所有早于此重新启动点的 .xz 文件。因此 wal_archives 目录不应该真的有 .xz 文件早于 20 分钟甚至 2 小时......
实际发生了什么?
该
/datadrive/postgresql/13/wal_archives
目录堆积了许多永远不会被清除的 .xz 文件。cat archive_cleanup_command.log
显示一个空文件。什么都没有写给它。当我通过 bash 手动运行 pg_archivecleanup 命令时,它可以工作(即清除指定文件之前的所有存档文件,并且 cat archive_cleanup_command 显示已清除的文件。
例如:pg_archivecleanup -d -x .xz /datadrive/postgresql/13/wal_archives 000000010000045E000000E5 >> /datadrive/postgresql/13/wal_archives/archive_cleanup_command.log 2>&1
然后运行
cat archive_cleanup_command.log
给出了这个:pg_archivecleanup: keeping WAL file "/datadrive/postgresql/13/wal_archives/000000010000045E000000E5" and later pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000DE.xz" pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000DF.xz" pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000E0.xz" pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000E1.xz" pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000E2.xz" pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000E3.xz" pg_archivecleanup: removing file "/datadrive/postgresql/13/wal_archives/000000010000045E000000E4.xz"
我尝试了什么?
我尝试了各种权限设置(例如:chmod 777 wal_archive 目录,将其他用户添加到 postgres 组等...)
广泛而彻底地阅读了 postgresql 文档,并查看了至少 20 个不同的相关 stackoverflow 帖子。
最初尝试使用 7zip 命令行工具来进行压缩而不是 pxz。
使用以下命令多次成功重启数据库:
sudo systemctl stop postgresql@13-main sudo systemctl start postgresql@13-main
删除逻辑复制并在主服务器上重新创建发布并在从服务器上重新创建订阅。
在主服务器上启用检查点。
看着
/var/log/postgresql/postgresql-13-main.log
。不幸的是,此日志中没有显示相关错误。