如何退出数据库恢复模式(目前锁定在只读模式)
How to exit out of database recovery mode (currently locked in read-only mode)
为了备份或复制远程数据库,前段时间建立了一个从数据库。但是,我不能再使用基于 Delphi 的 ETL 写入数据库(ETL 适用于另一个数据库对,但迄今为止从未用于该特定对)。复制数据库是由后来离开公司的其他人设置的。我有理由相信这已经被设置为一个复制数据库,但是离开后的员工告诉我,由于不相关的原因,复制从来没有工作过。使用 ETL,我们可以(使用 SQL 查询)从一个数据库读取,然后写回复制数据库,或者应该能够,因为它目前是只读的。
我试过:
- 维护如
VACUUM
- 尝试删除表和整个数据库
- 从主数据库恢复完整备份
None 这些工作,我被告知数据库是只读的。
我查看了 postgresql.conf
并看到 hot_standby
已被选中,所以我认为(但不是 100% 确定)数据库处于某种复制模式(我已经从未接触过 Postgres 支持的复制,所以我不知道)。
我检查了 pg_hba.conf
中的权限,发现其中有一些用于复制的凭据。我不确定这是否为数据库激活 "replication mode",或者只是意味着这些凭据仅用于复制。
我已经浏览了几个月的日志文件(自从我们的 IT 部门大约 5 个月前升级了整个网络以来,这一直没有用)。我看到下面看到的日志文件内容,几个月来一遍又一遍地重复。请注意,下面显示的 IP 地址列在 pg_hba.conf
文件中,因此凭据有效。
数据库处于恢复模式,正如我通过使用发现的:
select pg_is_in_recovery();
这向我解释了为什么它是只读的,但为什么我不能恢复数据库,或者只是简单地转储整个数据库并重新开始(这是一个备份,所以 losing/restoring 这不是问题)?
我很想尝试修改 recovery.conf
文件(存在),但我 read/believe 一旦恢复启动(在我的情况下已经启动)修改文件将无效.
我使用的是旧版 Postgres:9.2.9
非常感谢这里的任何帮助,因为我已经为此扎实工作了一天多了。
日志文件条目(示例):
FATAL: could not connect to the primary server:
FATAL: no pg_hba.conf entry for replication connection from host "192.168.20.2", user "postgres", SSL off
FATAL: could not connect to the primary server: server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the request.
有几个选项适合我:
- 将数据库从只读复制数据库转换为标准 read/write 数据库或
- Dump/drop 整个数据库,这样我就可以创建一个具有写入功能的新数据库。
看起来这两个数据库集群已经设置好进行复制,但是其中一台机器上的配置更改中断了复制(在主服务器上更改了 pg_hba.conf
,更改了 IP 地址,...)。
这是您想要的解决方案的方法:
使待机退出恢复模式: 运行
/path/to/pg_ctl promote -D /path/to/data/directory
作为操作系统用户 postgres
.
待命
Nuking 备用数据库: 使用 rm -rf
(或操作系统上的等效项)删除备用数据库上的数据目录。终止所有 PostgreSQL 进程。
然后使用initdb
在同一位置创建一个新的数据库集群。
为了备份或复制远程数据库,前段时间建立了一个从数据库。但是,我不能再使用基于 Delphi 的 ETL 写入数据库(ETL 适用于另一个数据库对,但迄今为止从未用于该特定对)。复制数据库是由后来离开公司的其他人设置的。我有理由相信这已经被设置为一个复制数据库,但是离开后的员工告诉我,由于不相关的原因,复制从来没有工作过。使用 ETL,我们可以(使用 SQL 查询)从一个数据库读取,然后写回复制数据库,或者应该能够,因为它目前是只读的。
我试过:
- 维护如
VACUUM
- 尝试删除表和整个数据库
- 从主数据库恢复完整备份
None 这些工作,我被告知数据库是只读的。
我查看了 postgresql.conf
并看到 hot_standby
已被选中,所以我认为(但不是 100% 确定)数据库处于某种复制模式(我已经从未接触过 Postgres 支持的复制,所以我不知道)。
我检查了 pg_hba.conf
中的权限,发现其中有一些用于复制的凭据。我不确定这是否为数据库激活 "replication mode",或者只是意味着这些凭据仅用于复制。
我已经浏览了几个月的日志文件(自从我们的 IT 部门大约 5 个月前升级了整个网络以来,这一直没有用)。我看到下面看到的日志文件内容,几个月来一遍又一遍地重复。请注意,下面显示的 IP 地址列在 pg_hba.conf
文件中,因此凭据有效。
数据库处于恢复模式,正如我通过使用发现的:
select pg_is_in_recovery();
这向我解释了为什么它是只读的,但为什么我不能恢复数据库,或者只是简单地转储整个数据库并重新开始(这是一个备份,所以 losing/restoring 这不是问题)?
我很想尝试修改 recovery.conf
文件(存在),但我 read/believe 一旦恢复启动(在我的情况下已经启动)修改文件将无效.
我使用的是旧版 Postgres:9.2.9
非常感谢这里的任何帮助,因为我已经为此扎实工作了一天多了。
日志文件条目(示例):
FATAL: could not connect to the primary server:
FATAL: no pg_hba.conf entry for replication connection from host "192.168.20.2", user "postgres", SSL off
FATAL: could not connect to the primary server: server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the request.
有几个选项适合我:
- 将数据库从只读复制数据库转换为标准 read/write 数据库或
- Dump/drop 整个数据库,这样我就可以创建一个具有写入功能的新数据库。
看起来这两个数据库集群已经设置好进行复制,但是其中一台机器上的配置更改中断了复制(在主服务器上更改了 pg_hba.conf
,更改了 IP 地址,...)。
这是您想要的解决方案的方法:
使待机退出恢复模式: 运行
/path/to/pg_ctl promote -D /path/to/data/directory
作为操作系统用户
postgres
. 待命
Nuking 备用数据库: 使用
rm -rf
(或操作系统上的等效项)删除备用数据库上的数据目录。终止所有 PostgreSQL 进程。然后使用
initdb
在同一位置创建一个新的数据库集群。