我正在尝试用recovery.conf文件恢复一个数据库,以便及时复制.
在recovery.conf文件中,我添加了一个恢复目标时间,如下所示。
recovery_target_time = '2011-06-16 04:10:00 IST'但是,在日志中,我可以看到它是否将时间提前了3.5小时至07:40,并且这一次尝试了实际的恢复,而不是我在recovery_target_time中提供的时间。
2011-06-16 12:53:45 IST LOG: starting archive recovery
2011-06-16 12:53:45 IST LOG: restore_command = '/app/postgresinstall/bin/pg_standby -l /dbdata/archive %f %p %r'
2011-06-16 12:53:45 IST LOG: recovery_target_time = '2011-06-16 07:40:00+05:30'
cp: cannot stat `/dbdata/archive/00000001.history': No such file or directory为什么有3.5小时的差异,而我需要帮助,弄清楚在确定恢复目标时间时发生了什么?
更新:以下是数据库中的时间详细信息
postgres=# SELECT EXTRACT(timezone_hour FROM now()),EXTRACT(timezone_minute FROM now());
date_part | date_part
-----------+-----------
5 | 30
(1 row)
postgres=# select now();
now
----------------------------------
2011-08-12 13:08:19.333068+05:30
(1 row)
OS Date/Time:
postgres@xxxxx:~$ date
Fri Aug 12 13:10:19 IST 2011当我试图从同一服务器和备份服务器上的WAL档案中恢复时,我也遇到了同样的问题。而且,我可以在这两台服务器上不断地重复这个问题。
因此,如果我需要创建一个接近当前时间的备份,我使用recovery_target_time 3.5小时后的当前时间,并启动DB与recovery.conf
发布于 2011-06-17 17:05:40
免责声明:我不是一个PostgreSQL DBA,虽然我经常尝试它。
您可能需要检查操作系统和psql中的时区。
在操作系统中运行以下命令:
[postgres@radarPG-db1 ~]$ date
Fri Jun 17 12:55:37 EDT 2011在psql中,运行以下命令:
postgres=# SELECT EXTRACT(timezone_hour FROM now()),EXTRACT(timezone_minute FROM now());
date_part | date_part
-----------+-----------
-4 | 0
postgres=# select now();
now
-------------------------------
2011-06-17 12:54:39.195291-04很多时候,有些人忘记将postgres默认为OS的时区。如果WAL文件还在其内部时间戳中包含时区,则必须将postgres中设置的时区与WAL文件的时区对齐。
需要考虑的其他事项如下:
恢复的默认行为是沿着采取基本备份时的当前时间线进行恢复。如果您想要恢复到某个子时间线(也就是说,您希望返回到某个状态,该状态是在一次恢复尝试之后生成的),那么您需要在'recovery.conf‘中指定目标时间线ID。无法恢复到比基本备份更早分支的时间线。
更新2011-06-20 15:08东部时间
这是从在线文档中得到的。请看一下这个,看看你是否遗漏了WAL的任何文件。如果您等了太久才在新服务器上设置WAL文件,postgres可能已经在启动时删除了它们。你可能需要找到那些WAL文件。查看它们是否驻留在旧服务器的pg_xlog文件夹中。
使用连续存档备份进行恢复
发布于 2012-07-16 22:34:47
在PostgreSQL中,IST可能并不意味着“印度标准时间”,这取决于postgresql.conf中的'timezone_abbreviations‘设置。应该将其设置为'India',以便在这里按照需要对IST进行解释。
https://dba.stackexchange.com/questions/3365
复制相似问题