防止PostgreSQL主机关闭期间的数据丢失



因此,我花了一天的大部分时间(以及之前的几次搜索(寻找一个可行的解决方案,以防止PostgreSQL服务器安装主机重新启动或关闭时数据丢失。我们维护了许多Azure和on-prem服务器,有人在没有首先确保Postgres不再将数据刷新到磁盘的情况下无意中关闭服务器的次数比应该的要频繁得多。值得注意的是,我们是一家Windows server商店。

我们目前的最佳实践(如果遵循得当的话(是停止Postgres服务,然后观察磁盘写入资源监视器中的Postgres数据目录。一旦没有任何内容写入该目录,请关闭主机。我必须认为,有一种更好的方法可以确保它不会以导致数据损坏的方式关闭,无论是否遵守最佳做法(或者在某些情况下,因为Windows Update强制重新启动,无论配置的设置是否告诉它不要重新启动(。

我考虑过一些事情,但一直无法找到可靠的答案:

  1. 创建一个使用";在事件上";触发以监视事件1074的系统日志。它必须被配置为";无论用户是否登录都运行";。该脚本将使用shutdown /a取消关闭命令,然后运行一个脚本来优雅地关闭Postgres。在任务调度程序在关闭序列中终止之前,计划的作业是否会可靠地触发,我看到了喜忧参半的结果
  2. 使用组策略创建关闭脚本。我的问题是,它会在执行关闭之前等待脚本完成吗

如何处理Postgres服务器Windows主机中的数据丢失?

首先,如果您将PostgreSQL注册为Windows服务,关闭机器将首先自动关闭PostgreSQL。

但即使没有这一点,在适当的硬件上正确配置的PostgreSQL服务器也永远不会遭受数据丢失(除非你遇到了一个罕见的PostgreQL软件错误(。关系数据库在崩溃后不丢失数据,这是关系数据库的基本要求之一。

列举一下脑海中浮现的几件事:

  • 确保PostgreSQL参数fsyncsynchronous_commit设置为on

  • 确保数据文件和WAL(Windows网络共享是而不是可靠的文件系统(

  • 确保您使用的存储没有缓存,也没有电池支持的

最新更新