> 数据库 > PostgreSQL >

postgresql 的三种日志

最近在模拟主备切换,备机可以成功切换成主机,但是主机未成功切换成备机,翻阅资料后发现是日志归档设置的问题。

情景描述:主从复制,模拟主机当掉,主从切换。从机成功切换为主机,但主机切换为从机后服务无法启动,查看日志后,报如下错误:

ERROR:  requested WAL segment 000000020000000000000030 has already been removed

根据报错信息,知道是由于在停机过程中,新备库所需的WAL已经被主库循环使用覆盖了,而在备库停机维护过程中,新主库并未打开归档。

结果是:新备库需要重做。

如主库打开归档,那么在备库重新恢复后,有了主库的归档,备库依然可以跟上主库。

主备切换和日志归档的实验场景会在后面单独写,今天先写下为了解决这个问题学到的其他知识。


当然为了研究这个问题,我发现对日志的概念很模糊,到底有多少日志,各自有什么样的功能不是很清楚,查阅后,整理如下:

PostgreSQL中有三种日志,pg_log,pg_xlog和pg_clog。分别记录一下,提醒自己。



OS:windows7

版本:postgresql9.5

一.路径
默认路径为C:\Program Files\PostgreSQL\9.5\data,可以自定义文件夹地址。

二 .用处 
pg_log 
该文件夹中的日志一般用来记录服务器与DB的状态,如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息等。linux自带的路径一般在/var/log/postgres下面。该日志有.csv格式和.log。这种日志是可以被清理删除不影响DB的正常运行。
当我们有遇到DB无法启动或者更改参数没有生效时,第一个想到的就是查看这个日志。 

如果服务无法启动,该日志文件夹下的日志没有记录,建议查看操作系统的事件查看器的日志。有助于快速定位问题。第一次有意识去看事件查看器的日志还是翔哥传授,谢谢翔哥哈,虽然我@他他也看不见~~~~



pg_xlog 
该文件夹中的日志是记录的Postgresql的WAL信息,也就是一些事务日志信息(transaction log),默认单个大小是16M,源码安装的时候可以更改其大小。这些信息通常名字是类似'000000010000000000000013'这样的文件,这些日志会在 定时回滚恢复(PITR), 流复制(Replication Stream)以及归档时能被用到,这些日志是非常重要的,记录着数据库发生的各种事务信息,不得随意删除或者移动这类日志文件,不然你的数据库会有无法恢复的风险 

当归档或者流复制发生异常的时候,事务日志会不断地生成,有可能会造成磁盘空间被塞满,最终导致DB挂掉或者起不来。遇到这种情况不用慌,可以先关闭归档或者流复制功能,备份pg_xlog日志到其他地方,但请不要删除。然后删除较早时间的的pg_xlog,有一定空间后再试着启动Postgres。 

pg_clog 
pg_clog这个文件也是事务日志文件,但与pg_xlog不同的是它记录的是事务的元数据(metadata),这个日志告诉我们哪些事务完成了,哪些没有完成。这个日志文件一般非常小,但是重要性也是相当高,不得随意删除或者对其更改信息。

总结:
pg_log记录各种Error信息,以及服务器与DB的状态信息,可由用户随意更新删除
pg_xlog与pg_clog记录数据库的事务信息,不得随意删除更新,做物理备份时要记得备份着两个日志。



(责任编辑:IT)