PG异常无法启动的问题:could not read file "pg

  • 时间:
  • 浏览:1

网上对于这部分的资料非常少,好在PG是开源的数据库,结合代码得到了如下的哪此信息。

qq克隆好友 槽提供了并不是自动化的土最好的办法,以确保主服务器在所有备用服务器接收到WAL段以前不必删除它们,后来主服务器不必删除可能性原因恢复冲突的行,即使在备用服务器断开连接时也是那末。

Similarly, hot_standby_feedback and vacuum_defer_cleanup_age provide protection against relevant rows being removed by vacuum, but the former provides no protection during any time period when the standby is not connected, and the latter often needs to be set to a high value to provide adequate protection. Replication slots overcome these disadvantages.

第还还有一个,当亲们不须要使用逻辑qq克隆好友 ,那末只须要将参数max_replication_slots设置为0,则数据库自动不创建该文件,从而补救该大疑问。

截取StartupReplicationOrigin()函数的一段代码

第还还有一个 ,可能性亲们须要使用逻辑qq克隆好友 ,也也不 须要使用logical decoding,那末须要设置参数max_replication_slots大于1

当经常 出现经常 断电的情況,pg_logical/replorigin_checkpoint只创建了文件,那末来得及写数据的情況下,仍然会经常 出现并不是大疑问。

很多可能性的补救土最好的办法是,当数据库启动异常时,将文件删除,确保数据库也能正常启动。

其中致命的错误是这句。

接下来的两段,是在说明,在那末使用qq克隆好友 槽的以前,要怎样补救上面提到的还还有一个 大疑问

很显然,使用qq克隆好友 槽也能更好的补救哪此大疑问。

参数max_replication_slots的设置,与 logical decoding有关

In lieu of using replication slots, it is possible to prevent the removal of old WAL segments using wal_keep_segments, or by storing the segments in an archive using archive_command. However, these methods often result in retaining more WAL segments than required, whereas replication slots retain only the number of segments known to be needed. An advantage of these methods is that they bound the space requirement for pg_xlog; there is currently no way to do this using replication slots.

未必那末,是可能性经常 认为该文件是在数据库启动时重建的。

直到意外的,在关闭数据库后清空文件内容,才成功复现了该大疑问。

在PostgreSQL 9.5.16 Documentation的文档中,亲们找到如下描述的内容。

CheckPointReplicationOrigin()

Before you can use logical decoding, you must set wal_level to logical and max_replication_slots

to at least 1.

注意:pg_logical/replorigin_checkpoint,文件是在数据库关闭时重建的,后来不到删除,须要清空文件内容。

新安装不久的PostgreSQL数据库,断电后重启,查看日志如下

2019-01-08 08:44:19.989 UTC [7493] PANIC: could not read file "pg_logical/replorigin_checkpoint": Success

大疑问可能性清楚了,那末亲们还有还还有一个 大疑问须要补救

而亲们通过源码,也能发现,将qq克隆好友 槽中内容,持续写入到文件的过程

并不是提示很明显,与文件replorigin_checkpoint有关。

于是找到并不是文件,在数据库正常启动的情況下,尝试通过删除和修改的土最好的办法重现该大疑问。

补救该大疑问须要从两方面考虑

其中,截取CheckPointReplicationOrigin函数的代码

代码中经常 出现了亲们日志中的错误 could not read file....,: Success

错误的原因是内容的大小与预设值不一致。与亲们以前的测试结果同类,不到更改内容才会报错。

无论是删除,还是修改,在数据库重启的情況下总要被重建。无法复现错误。

Replication slots provide an automated way to ensure that the master does not remove WAL segments until they have been received by all standbys, and that the master does not remove rows which could cause a recovery conflict even when the standby is disconnected.