[关闭]
@Mr-13 2020-10-29T00:52:56.000000Z 字数 1742 阅读 140

工作手机运维:PostGres数据库维护

工作手机运维



一、归档日志清理

  pg_archivecleanuppg_rewind 是PG 中两个重要的功能,一个是为了清理过期的 archive log 使用的命令,另一个是你可以理解为物理级别的 wal log的搬运工。
  
  这里主要针对pgsql庞大的归档日志进行清理,主要关注 pg_archivecleanup ;这个命令主要是用于使用了archive log(归档日志)功能的 postgresql ;在 archive log 堆积如山的情况下,来根据某些规则,清理这些日志。
  

先的说说如果不定期清理会出什么问题:

清理archivelog时需要关注的点:

  清理时,清理的WAL_LOG 是否已经是包含在最后一次的备份中,保证清理的WAL_LOG 可以从备份文件中恢复数据库;

  大白话说:这些成千上万的归档日志中,哪些历史日志已经被后面的日志包含了;已经没用了;我们需要确认这样一个“分割线”。


重点来了:

  如上图,pgsql进行数据备份之后,会在wal_log里面有 backup 的标记,这说明这个wal_log之前的数据已经备份了,如果清理这个wal_log之前的log是安全的;不会引起pgsql服务异常。
  

  有了方法,下面实际操作一波:


第一步:先看一下pg_archivecleanup工具的使用帮助

  1. # root用户下操作即可
  2. [root@wechatdb ~]# pg_archivecleanup -?

  如上图,可以看到使用帮助给出了两个使用例子;不建议使用第一个,问题很多,我们使用第二种方式:

  1. # pg_archivecleanup [目录] [wal_log文件名]

第二步:看一下带有backup标记的wal_log文件

  1. # 进入归档日志目录
  2. [root@wechatdb pg_wal]# pwd
  3. /data/pgsql/data/pg_wal
  4. # 查找我们需要的wal_log文件
  5. [root@wechatdb pg_wal]# find . -type f -name '*backup' -print0 | xargs -0 ls -l

  1. [root@wechatdb pg_wal]# pwd
  2. /data/pgsql/data/pg_wal
  3. # 顺便看一下,清理之前一共有多少个wal_log文件
  4. [root@wechatdb pg_wal]# ls . | wc -w
  5. 114882
  6. # 总共114882个wal_log文件

第三部:开始清理wal_log文件

  根据上面查出的带有backup标记的文件中,我们逐个走一遍(其实只要执行最后一个就行了,这里主要是为了看一下能清理掉多少,挨个走一遍)
  

  1. [root@wechatdb pg_wal]# pwd
  2. /data/pgsql/data/pg_wal
  3. [root@wechatdb pg_wal]# pg_archivecleanup /data/pgsql/data/pg_wal 000000010000035600000029.00000028.backup
  4. # 执行过程需要等一会儿
  5. # 执行完了之后,再看一下文件数量
  6. [root@wechatdb pg_wal]# ls /data/pgsql/data/pg_wal | wc -w
  7. 112665
  8. # 还剩下112665
  9. # 看一下postgres服务进程,如下图:


  
  pgsql服务进程正常运行,服务前端数据查询正常,OK;继续对其他的backup标记文件执行pg_archivecleanup操作。


处理结果

  全部处理完成之后,再看一下 /data/pgsql/data/pg_wal 目录:

  如上图。/data 目录所在磁盘从98% 直接降到 14%;/data/pgsql/data/pg_wal 目录大小从 1.8T 直接降到 185G !wal_log文件个数从 114882 减到 11823(就剩下了个零头)。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注