在我工作的地方,服务器由外部公司管理,因此当您想要一台新服务器时,您会在一段时间内获得 root 密码来设置它,然后他们会更改它,您应该使用非 root 用户身份进行操作。
不久前,我设置了我的服务器,它运行 Red Hat Enterprise Linux 服务器 5.4、Apache 2.2.3、Apache Tomcat 5.5.23 和 PostgreSQL 8.1.22。我创建了一个用户、一个数据库,并用数据填充了它,没有问题。他们更改了 root 密码,一切似乎都正常。
几个月前,服务器因大楼电气维护而关闭。我不知道他们是否彻底关闭了它。
由于服务器使用不多,我上周才发现 PostgreSQL 服务器在重启时没有再次启动。我不得不要求他们启动它,当他们启动时,令人惊讶的是,一切都消失了:我创建的用户、数据库…… Tomcat 应用程序本身仍然存在并正在运行,但没有数据库连接,它就做不了什么。
我暂时设法获得了 root 密码,所以我可以查看一下。
有没有办法找出删除了所有内容的原因?我该如何防止这种情况再次发生?
/var/lib/pgsql/ 中的所有内容都是在服务器重启的那天记录的,事实上,一切看起来都像是第一次启动服务器。
这台机器上可能有多个 PostgreSQL 服务器或位置,而旧数据库仍然在某个地方?还是有什么东西把 PostgreSQL 抹掉了?
我有备份,所以数据本身没有丢失,但我非常想了解发生了什么。
答案1
该服务器上的磁盘/lvm 配置有什么特别之处吗?
/var/lib/pgsql/data 目录是否是一个单独的文件系统,可能位于 SAN 上,或者只是一组单独的磁盘?如果有人手动挂载了 data/ 而没有将其放入 fstab 中,那么在第一次重启后,你会大吃一惊。
答案2
我认为在旧版本的 RH 中,初始化脚本总是会查找 /var/lib/pgsql/data,如果找不到集群,就会初始化一个新集群,因此@iPaulo 提到的情况或任何非默认情况都可能像您描述的那样结束。
我倾向于在服务器范围内搜索 postgres 特定的文件,比如 postgresql.conf 或 pg_hba.conf,看看是否可以找到数据库的另一个副本,并检查 /var/log 或类似位置中是否有任何可能显示旧集群证据的日志;某个地方可能有一个 PGDATA。
附注:如果一切都失败了,您可以利用这个机会升级;8.1 几年前就停产了。改为使用 9.1 :-)