容器化部署PG重启后数据丢失,如何恢复?

容器化部署的单机10.4版本pg,运维人员把docker重启后,pg一直无法启动;执行pg_resetwal没有加时间点启动后,发现数据表及丢失了;重新创建表时,提示表已存在,但是pg_tables系统表中未查询到所创建表的记录;还有部分表在information_schema.tables系统表中能查询到数据大小,但是直接查询表没有记录。

参与9

2同行回答

austindatabaseaustindatabase数据库架构师互联网金融
实际上这个问题可以从两个部分看1  在你使用pg_resetwal 不指定时间的情况下,并启动数据库发现数据丢失,是由于 WAL日志没有正确应用到数据库中造成的,数据库是通过WAL来保证数据的一致性,那么你的WAL 没有应用对,那么必然数据丢失。但比较遗憾的是,基于操作这对于数据...显示全部

实际上这个问题可以从两个部分看

1  在你使用pg_resetwal 不指定时间的情况下,并启动数据库发现数据丢失,是由于 WAL日志没有正确应用到数据库中造成的,数据库是通过WAL来保证数据的一致性,那么你的WAL 没有应用对,那么必然数据丢失。

但比较遗憾的是,基于操作这对于数据库这块的基础知识没有,那么在没有备份的情况下,恢复数据库的可能性很低。

2  不建议在PG数据库使用容器,基于数据库实现模式不同,MySQL可以勉强进行容器化,PG 不建议

收起
互联网服务 · 2023-09-21
浏览358
lych370lych370联盟成员系统运维工程师个人
[此回答已删除]

ChatGPT 回答

针对这个问题,我可以提供以下解决思路:

  1. 确认容器化部署的单机10.4版本pg的配置是否正确,例如是否正确映射了数据卷等。
  2. 检查容器内部的日志,查看是否有相关的错误信息,以便更好地定位问题。
  3. 尝试使用pg_resetxlog命令来恢复数据,该命令可以重置WAL日志,但需要注意的是,该命令会删除所有未应用的WAL日志,因此需要谨慎使用。
  4. 如果数据表确实丢失了,可以尝试使用备份来恢复数据。如果没有备份,则需要考虑使用数据恢复工具来尝试恢复数据,例如EaseUS Data Recovery等。
  5. 如果重新创建表时提示表已存在,但是pg_tables系统表中未查询到所创建表的记录,可以尝试使用pg_class系统表来查找表的OID,然后使用OID来删除表。
  6. 如果部分表在information_schema.tables系统表中能查询到数据大小,但是直接查询表没有记录,可以尝试使用VACUUM命令来清理表,以便恢复数据。

总之,针对这个问题,需要仔细排查,找到具体的原因,然后采取相应的措施来解决问题。同时,建议在容器化部署的过程中,注意备份数据,以便在出现问题时能够快速恢复数据。

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2023-07-13
  • 关注会员:3 人
  • 问题浏览:1412
  • 最近回答:2023-09-21
  • X社区推广