一、 注意事项
pg_archivecleanup代码中仅进行了wal日志文件名的对比,没有实现对WAL日志名及对应生成时间的判断。在WAL日志未被重命名时,时间与日志名顺序名一致,没有问题。一旦WAL日志被重命名,pg_archivecleanup清理就可能清理掉比指定文件更新的WAL日志。
因此,在涉及主从尤其是有lag的情况下,非必要不建议使用。
if ((IsXLogFileName(walfile) || IsPartialXLogFileName(walfile)) &&
strcmp(walfile + 8, exclusiveCleanupFileName + 8) < 0)
{
char WALFilePath[MAXPGPATH * 2]; /* the file path
* including archive */
...
rc = unlink(WALFilePath);
if (rc != 0)
{
pg_log_error("could not remove file \"%s\": %m",
WALFilePath);
break;
}
}
二、 清理步骤
真正到了必要的时刻,例如剩余磁盘空间已不足10%甚至5%,必须先检查从库所需日志与待清理日志间的新旧。
1. 检查从库所需日志
|
以上面结果为例,write_wal 是从库正在接收的最新日志,理论上从write_wal 对应日志往前推就可以,安全起见可以再往前推一段。
2. 确认待清理日志
例如当前write_wal为 00000003001281A1000000BD,那么清理00000003001281A100000000之前的日志应该是安全的。
检查两个文件是否存在
|
3. dryrun pg_archivecleanup
先检查运行命令之后哪些文件将会被清理,有没有大于write_wal的。当然,在删除量特别大时,基本只能抽查或者搜索。
|
4. 清理日志
真正执行清理
|
5. 清理后检查
检查主从延迟是否还正常运行,若已中断,则下面查询无结果
|
检查旧日志是否已清理文章来源:https://www.toymoban.com/news/detail-618873.html
根据前面-n或者-d的输出,抽查一些日志看是否还存在,检查磁盘空间是否已释放。文章来源地址https://www.toymoban.com/news/detail-618873.html
到了这里,关于pg_archivecleanup清理wal日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!