我一直在为Postgres 9.1进行热备份,并且遇到了一个一致的问题。在从属服务器上重新启动Postgres后,pgstartup日志文件和pg_log目录下的每日日志文件将正确读取。但是,当我尝试使用psql命令进入数据库时,出现错误:
严重:数据库系统正在启动。
recovery.conf文件也不会变为recovery.done。我已经广泛研究了此错误,并始终找到相同的响应:在尝试重新启动Postgres之前,尚未彻底关闭数据库。我重新启动Postgres的唯一方法是通过service postgresql-9.1 restart
or /etc/init.d/postgresql-9.1 restart
命令。收到此错误后,我将终止所有进程,然后再次尝试重新启动数据库,但仍然收到相同的错误。我不知道从哪里去以及如何解决此问题。以下是完成热备份的确切过程。
主服务器配置:
pg_hba.conf,添加以下行:
主机复制postgres IPAddressOfSlaveServer信任
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address ='*' 端口= 5432 max_wal_senders = 5 wal_keep_segments = 32
从服务器配置:
postgresql.conf:
hot_standby =开启
recovery.conf:
Standby_mode =开 primary_conninfo =主机= IPAddressOfMasterServer 端口= 5432 用户= postgres restore_command ='cp /var/lib/pgsql/9.1/data/pg_xlog/%f“%p”'
配置两个服务器之后
我更改为主服务器上的postgres用户并运行以下命令:
psql -c“选择pg_start_backup('label',true);”; rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave:/var/lib/pgsql/9.1/data \ -排除postmaster.pid pgsql -c“选择pg_stop_backup();”;
与从属服务器同步数据库后
我重新启动从属服务器,并且启动不会失败。pgstartup.log读取:
成功。现在,您可以使用以下命令启动数据库服务器: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data 要么 /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l日志文件启动
当前日志文件postgresql-Thu.log读取:
日志:正在关闭 日志:数据库系统已关闭 日志:2012年4月10日恢复时数据库系统已关闭 日志:进入待机模式 日志:从存档中恢复日志文件“ logFileName” 日志:在0 / BF0000B0处达到一致的恢复状态 日志:重做从0 / BF000020开始 日志:从存档中恢复日志文件“ logFileName” 日志:日志文件0(段192)中的意外pageaddr 0/85000000,偏移量0 日志:日志文件0(段192)中的意外pageaddr 0/85000000,偏移量0 日志:流复制成功连接到主数据库
我研究了意料之外的pageaddr,并从postgres档案中进行了研究,据我了解,这是正常现象,也是检测WAL结束的预期方法之一。
任何建议将不胜感激。