我已经看过postgres文档,下面给出了概要:
pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid,fileid,seg ] datadir但在文档中,他们没有解释什么是datadir。是%postgres-path%/9.0/data还是%postgres-path%/9.0/data/pgxlog?
另外,如果我想更改我的xlog目录,是否可以简单地移动当前pg_xlog目录中的项并运行该命令以指向另一个目录?(假设我当前的pg_xlog目录在/data1/postgres/data/pg_xlog中,我希望日志转到的目录是:/data2/pg_xlog)
下面的命令会达到我刚才描述的效果吗?
mv /data1/postgres/data/pg_xlog /data2/pg_xlog
pg_resetxlog /data2发布于 2012-10-17 13:44:57
pg_resetxlog是让您的数据库在以下情况下重新运行的最后工具:
从pg_xlog;
pg_xlog目录的文件系统级备份(这种情况发生的次数比您想象的要多,人们会认为“它在名称中有日志,所以它肯定不重要;我会将它留在backups").
就像手册上说的:
pg_resetxlog清除预写日志(WAL) ....如果这些文件已损坏,则有时需要此函数。只有在服务器由于这种损坏而无法启动时,它才应该作为最后的手段使用。
除非您确切地知道自己在做什么以及为什么要运行pg_resetxlog,否则不要运行。如果你不确定,可以在pgsql-general mailing list或https://dba.stackexchange.com/上询问。
文档警告称,pg_resetxlog 可能会损坏您的数据库。如果你必须使用它,你应该REINDEX,转储你的数据库,重新初始化数据库,然后重新加载你的数据库。不要只继续使用损坏的集群。根据文档:
运行此命令后,应该可以启动服务器,但请记住,由于部分提交的事务,数据库可能包含不一致的数据。您应该立即转储数据,运行initdb,然后重新加载。重新加载后,检查不一致并根据需要进行修复。
如果您只是想将预写日志目录移动到另一个位置,则应该:
从旧位置到新的location
的符号链接停止location
或者,作为documentation says
如果日志位于与主数据库文件不同的磁盘上,这将非常有利。这可以通过将pg_xlog目录移动到另一个位置(当然是在服务器关闭时)并创建一个从主数据目录中的原始位置到新位置的符号链接来实现。
如果PostgreSQL无法启动,则说明您做错了什么。不要使用pg_resetxlog来“修复”它。撤消您的更改并找出您做错了什么。
https://stackoverflow.com/questions/12897429
复制相似问题