PG归档日志清理

1、确认主从节点

  1. 方法一:通过pg_controldata输出
  2. /usr/lib/postgresql/11/bin/pg_controldata -D $PGDATA | grep "Database cluster state"
  3. # 主节点: in production
  4. # 从节点: in archive recovery
  5. # $PGDATA路径通过 ps -ef |grep -v grep |grep postgres |grep config_file
  6. 方法2:通过数据字典表pg_stat_replication
  7. select count(*) from pg_stat_replication;
  8. # 主机表中能查到记录,备机表中无记录
  9. 方法3:通过自带函数判断
  10. select pg_is_in_recovery();
  11. # f表示主节点, t表示为备节点
  12. (推荐)方法4:通过进程查看,显示wal sender的是主机,显示wal receiver的是备机
  13. ps -ef |grep receiver
  14. ps -ef |grep sender
  15. # 主机: wal sender process
  16. # 备机: wal receiver process

2、确认主从同步状态正常

  1. # 主节点
  2. select * from pg_stat_replication;
  3. # 输出结果能看到从节点的同步信息, 则表示同步正常

3、确认归档日志目录

  1. # 主节点
  2. 方法1
  3. select * from pg_settings where name='archive_command';
  4. # setting字段即为归档日志目录
  5. 方法2
  6. # 查看配置文件路径
  7. ps -ef|grep postgres |grep config_file
  8. # 查看配置文件中定义的归档目录
  9. cat /etc/postgresql/11/main/postgresql.conf|grep archive_command

4、查看当前同步的wal segment

  1. # 从节点
  2. ps -ef|grep -v grep |grep postgres |grep recov
  3. # 能看到0000000100000039000000D3一串输出,即为当前同步的segment

5、清除归档日志

  1. # 主节点
  2. pg_archivecleanup $PG_ARCHIVE_PATH $WAL_SEGMENT
  3. # $PG_ARCHIVE_PATH为第3步结果输出
  4. # $WAL_SEGMENT为第4步结果输出(注意:不要直接清除当前正恢复的节点文件$WAL_SEGMENT,应清除此$WAL_SEGMENT的第前500个节点)