PG归档日志清理
1、确认主从节点
方法一:通过pg_controldata输出
/usr/lib/postgresql/11/bin/pg_controldata -D $PGDATA | grep "Database cluster state"
# 主节点: in production
# 从节点: in archive recovery
# $PGDATA路径通过 ps -ef |grep -v grep |grep postgres |grep config_file
方法2:通过数据字典表pg_stat_replication
select count(*) from pg_stat_replication;
# 主机表中能查到记录,备机表中无记录
方法3:通过自带函数判断
select pg_is_in_recovery();
# f表示主节点, t表示为备节点
(推荐)方法4:通过进程查看,显示wal sender的是主机,显示wal receiver的是备机
ps -ef |grep receiver
ps -ef |grep sender
# 主机: wal sender process
# 备机: wal receiver process
2、确认主从同步状态正常
# 主节点
select * from pg_stat_replication;
# 输出结果能看到从节点的同步信息, 则表示同步正常
3、确认归档日志目录
# 主节点
方法1:
select * from pg_settings where name='archive_command';
# setting字段即为归档日志目录
方法2:
# 查看配置文件路径
ps -ef|grep postgres |grep config_file
# 查看配置文件中定义的归档目录
cat /etc/postgresql/11/main/postgresql.conf|grep archive_command
4、查看当前同步的wal segment
# 从节点
ps -ef|grep -v grep |grep postgres |grep recov
# 能看到0000000100000039000000D3一串输出,即为当前同步的segment
5、清除归档日志
# 主节点
pg_archivecleanup $PG_ARCHIVE_PATH $WAL_SEGMENT
# $PG_ARCHIVE_PATH为第3步结果输出
# $WAL_SEGMENT为第4步结果输出(注意:不要直接清除当前正恢复的节点文件$WAL_SEGMENT,应清除此$WAL_SEGMENT的第前500个节点)