Linux服务器重启后pg数据库出现的问题

遇到一个很奇怪的问题。
因为有同事遇到过这个问题,然后我想测试一下把Linux服务器重启之后原来的PostgreSQL里面的库会不会出问题
重启前执行了sync同步了一下数据,然后用shutdown -r now命令把服务器给重启了

img


然后问题就来了,重启之后启动pg服务之后发现PostgreSQL里只剩下初始库了,之前建的库不在了

img


当时没有多想,想着先测试定位是不是服务器重启之后会出现库丢失的问题,于是就用命令直接在数据库里新建了一个test库并且导入的一些数据,按同样的步骤重启之后奇怪的地方来了,原来的库又完好无损的可以连接上了,但是创建的test库却又不见了

img


现在原先的数据库使用一切正常,因为急着定位问题没有在出现问题情况下的服务器去查看配置,想问一下友友们有没有遇到过类似的情况,有没有定位到问题在哪呀,很想搞清楚到底是哪里的问题。

以下回答部分来自chatgpt,请参考:
根据您的描述,这种情况下数据库丢失和重新出现的问题可能与 PostgreSQL 的恢复机制相关。当数据库发生异常关闭(如服务器突然断电)时,PostgreSQL 会尝试自动执行崩溃恢复操作。

在一些情况下,PostgreSQL 可能会选择从保存点(Savepoint)开始恢复数据库,而不是从最新的事务日志位置恢复。这可能导致部分数据库更改(例如在突然关闭之前创建的数据库)不可见,直到恢复完成后。

下面是一些可能的原因:

  1. PostgreSQL 内部保存点:在服务器重启后,PostgreSQL 可能会自动选择恢复到某个保存点,该保存点早于您创建的 test 数据库。这样,重启后会回滚到保存点之前的状态,而 test 数据库会被删除。

  2. 数据库恢复设置:您可能在 PostgreSQL 的配置文件中设置了特定的恢复选项。例如,如果 recovery_target 参数被配置为一个早于创建 test 数据库的时间点,那么在恢复过程中 test 数据库将被删除。

为了进一步理解和定位问题,您可以检查以下信息:

  1. 检查 PostgreSQL 的日志文件(通常位于 PostgreSQL 数据目录的 pg_log 子目录下),查看重启期间是否有任何异常或警告。

  2. 检查 PostgreSQL 的配置文件(postgresql.conf)和恢复配置文件(recovery.conf),了解是否设置了特定的恢复选项。

  3. 在 PostgreSQL 数据目录中,检查 pg_xlog 目录下的事务日志文件,了解在异常关闭后是否存在正确的持久化数据。

  4. 验证数据库的完整性,并确保所有表和数据都存在。您可以使用 PostgreSQL 提供的工具(如 pg_dump)备份和还原数据库,以验证数据的一致性。

请注意,如果您对 PostgreSQL 的配置和恢复流程不熟悉,最好咨询专业的 PostgreSQL 支持或论坛,以获取更详细的帮助和指导。他们可以更全面地检查您的配置和日志文件,以进一步帮助您定位和解决问题。

看似可见性问题。数据能不能看见,有两个因素,一是数据是否在库里;二是对当前事务是否可见;再次重启后,原来不可见的数据,可以看到了,而且使用正常。这就是可见性出了问题。

在系统关机后,数据库再次启动时,会执行恢复,可能这里有一些可见性数据恢复的有问题。psql -V 看下版本号,说不定在新版本已经被解决了。