主服务器
# postgresql.conf
wal_level = hot_standby
archive_mode = on
archive_timeout = 10
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f'备用服务器
hot_standby = on我将主服务器中的/archive/*复制到备用服务器中的$PGDATA/pg_xlog,但没有发生任何事情。当我重新启动备用服务器时,我从服务器日志中得到错误消息:
2016-11-21 17:56:09 CST [17762-3] LOG: invalid primary checkpoint record
2016-11-21 17:56:09 CST [17762-4] LOG: record with zero length at 0/6000100
2016-11-21 17:56:09 CST [17762-5] LOG: invalid secondary checkpoint record
2016-11-21 17:56:09 CST [17762-6] PANIC: could not locate a valid checkpoint record
2016-11-21 17:56:09 CST [17761-1] LOG: startup process (PID 17762) was terminated by signal 6: Aborted
2016-11-21 17:56:09 CST [17761-2] LOG: aborting startup due to startup process failure问题:
/archive/*复制到备用服务器中的$PGDATA/pg_xlog,将数据同步到备用服务器是否就足够了?$PGDATA/pg_xlog目录中的新WAL文件?还是我必须手动触发?conninfo。我说的对吗?hot_standby = on并重新启动服务器之后,我仍然可以在没有错误的情况下执行INSERT。如何配置,使它真正的只读?发布于 2016-11-21 12:03:55
这看起来很像是您没有正确初始化备用数据库。
日志文件声明PostgreSQL甚至不会开始复制,因为它无法找到一个有效的检查点。
您的备用数据目录中的backup_label文件包含什么?如果该文件不存在,这可能就是问题所在。
那个备用装置突然停止工作了还是从来没有起过作用?你到底是怎么创建备用的?
发布于 2016-11-21 12:54:42
您必须首先从主服务器的低级别基本备份创建备用。您不能创建一个新实例并使用pg_dump和pg_restore。我猜这就是你想要做的。
进行适当的基本备份的最简单方法是使用pg_basebackup。手册中讨论了其他选项,但实际上,只需使用:
pg_basebackup -X stream -D standby_datadir_location -h master_ip或者类似的。
只有在有了有效的基本备份之后,才能启动归档恢复或流复制。最简单的方法是启用流复制。让pg_basebackup通过传递-R标志来帮您做到这一点。
如果要进行存档恢复,则应向备用文件的recovery.conf中添加一个recovery.conf,该recovery.conf将档案从存档位置复制到备用文件。
所有这些都被手册所覆盖。
https://stackoverflow.com/questions/40718588
复制相似问题