archive_cleanup_command 不清除存档的wal文件
archive_cleanup_command does not clear the archived wal files
主要问题:
postgresql.conf 文件中的 archive_cleanup_command 不会清除存档的 wal 文件。我怎样才能让它清除存档的 wal 文件?
相关信息:
- 我的 OS 是 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 分钟创建一个重启点。 archive_timeout 设置为 10 分钟意味着 postgresql 在每 10 分钟后强制执行一次日志文件段切换。因此,至少每 10 分钟,就会创建一个重启点。每当创建重启点时,存档清理命令为运行。当此命令为 运行 时,它将清除所有早于此重启点的 .xz 文件。因此 wal_archives 目录实际上不应包含早于 20 分钟甚至 2 小时的 .xz 文件....
到底发生了什么?
/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
然后 运行ning 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 个不同的相关 Whosebug 帖子。
最初尝试使用 7zip 命令行工具而不是 pxz 进行压缩。
使用以下命令成功重启数据库多次:
sudo systemctl stop postgresql@13-main
sudo systemctl start postgresql@13-main
删除逻辑复制并在主服务器上重新创建发布并在从服务器上重新创建订阅。
在 master 本身上启用检查点。
看过/var/log/postgresql/postgresql-13-main.log
。不幸的是,此日志中没有显示相关错误。
重启点,restore_command
和 archive_cleanup_command
仅适用于流式(“物理”)复制,或一般恢复,不适用于逻辑复制。
逻辑复制备用数据库不在恢复中,它已打开以进行读写。在该状态下,archive_cleanup_command
等恢复设置将被忽略。
您将不得不找到另一种机制来删除旧的 WAL 档案,最好与您的备份解决方案结合使用。
主要问题:
postgresql.conf 文件中的 archive_cleanup_command 不会清除存档的 wal 文件。我怎样才能让它清除存档的 wal 文件?
相关信息:
- 我的 OS 是 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 分钟创建一个重启点。 archive_timeout 设置为 10 分钟意味着 postgresql 在每 10 分钟后强制执行一次日志文件段切换。因此,至少每 10 分钟,就会创建一个重启点。每当创建重启点时,存档清理命令为运行。当此命令为 运行 时,它将清除所有早于此重启点的 .xz 文件。因此 wal_archives 目录实际上不应包含早于 20 分钟甚至 2 小时的 .xz 文件....
到底发生了什么?
/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
然后 运行ning
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 个不同的相关 Whosebug 帖子。
最初尝试使用 7zip 命令行工具而不是 pxz 进行压缩。
使用以下命令成功重启数据库多次:
sudo systemctl stop postgresql@13-main sudo systemctl start postgresql@13-main
删除逻辑复制并在主服务器上重新创建发布并在从服务器上重新创建订阅。
在 master 本身上启用检查点。
看过
/var/log/postgresql/postgresql-13-main.log
。不幸的是,此日志中没有显示相关错误。
重启点,restore_command
和 archive_cleanup_command
仅适用于流式(“物理”)复制,或一般恢复,不适用于逻辑复制。
逻辑复制备用数据库不在恢复中,它已打开以进行读写。在该状态下,archive_cleanup_command
等恢复设置将被忽略。
您将不得不找到另一种机制来删除旧的 WAL 档案,最好与您的备份解决方案结合使用。