我一直试图设置一个简单的testingPostgreSQL 9.0数据库的连续归档,按照文档 。 在postgres.conf中我设置了:
wal_level =存档
archive_mode = on
archive_command ='touch / home / myusername / backup / testtouch'
archive_timeout = 30s
…并重新启动PostgreSQL。 触摸列出的文件从不出现。 我可以手动运行touch命令,并按预期工作。
如果我尝试创build备份,它将永远等待archive_command。 在psql中;
postgres =#SELECT pg_start_backup('touchtest');
pg_start_backup
—————–
0/14000020(1排)postgres =#SELECT pg_stop_backup();
注意:已完成pg_stop_backup清理,正在等待所需的WAL段归档>警告:pg_stop_backup仍在等待所有必需的WAL段归档(经过60秒)
提示:检查您的archive_command是否正确执行。 可以安全地取消pg_stop_backup,但是没有所有WAL段,数据库备份将不可用。
这会导致什么? 我怎样才能解决它?
其他信息:在CentOS 5.4上运行。 PostgreSQL 9.0.2以root身份安装。
更新:我第一次尝试使用cp -i %p /home/myusername/backup/%f </dev/null和test ! -f /home/myusername/backup/%f && cp %p /home/myusername/backup/%f存档test ! -f /home/myusername/backup/%f && cp %p /home/myusername/backup/%f test ! -f /home/myusername/backup/%f && cp %p /home/myusername/backup/%f以匹配手册。 我把它简化为简单的触摸呼叫进行故障排除。
该Postgresconfiguration看起来不错
CentOS在默认情况下将用户目录模式设置为700,因此检查是否确实是这种情况,如果可以使用su作为root用户来触摸该文件
su - postgres -c "touch /home/myusername/backup/testtouch"
如果这样做,然后尝试在Postgres中使用详细日志logging,并检查postgres日志中的进一步错误。
您的存档命令需要包含更多信息。
来自PostgreSQL doco
在archive_command中,%p被replace为要归档的文件的path名,而%f仅replace为文件名。 (path名称相对于当前工作目录,即集群的数据目录。)
archive_command ='copy'%p“”C:\ server \ archivedir \%f“'#Windows
总的来说,它并不在我看来(不熟悉CentOS的触摸命令),就像你在archive命令脚本中包含variables一样。 请记住,将要存档的日志文件的文件名永远在变化。 归档命令还需要知道您将文件存档到的位置。