首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pg_resetxlog是做什么的?它是如何工作的呢?

pg_resetxlog是做什么的?它是如何工作的呢?
EN

Stack Overflow用户
提问于 2012-10-15 22:08:18
回答 4查看 19.1K关注 0票数 5

我已经看过postgres文档,下面给出了概要:

代码语言:javascript
运行
复制
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)

下面的命令会达到我刚才描述的效果吗?

代码语言:javascript
运行
复制
mv /data1/postgres/data/pg_xlog /data2/pg_xlog
pg_resetxlog /data2
EN

Stack Overflow用户

发布于 2012-10-17 13:44:57

pg_resetxlog是让您的数据库在以下情况下重新运行的最后工具:

pg_xlog;

  • You中删除了您不应该删除的文件由于备份系统配置错误,恢复了一个忽略了pg_xlog目录的文件系统级备份(这种情况发生的次数比您想象的要多,人们会认为“它在名称中有日志,所以它肯定不重要;我会将它留在backups").

  • File-system损坏之外,因为硬件故障或硬盘故障损坏了您的数据目录;甚至

  • PostgreSQL错误或操作系统错误损坏了预写日志(非常罕见)。”

就像手册上说的:

pg_resetxlog清除预写日志(WAL) ....如果这些文件已损坏,则有时需要此函数。只有在服务器由于这种损坏而无法启动时,它才应该作为最后的手段使用。

除非您确切地知道自己在做什么以及为什么要运行pg_resetxlog,否则不要运行。如果你不确定,可以在pgsql-general mailing listhttps://dba.stackexchange.com/上询问。

文档警告称,pg_resetxlog 可能会损坏您的数据库。如果你必须使用它,你应该REINDEX,转储你的数据库,重新初始化数据库,然后重新加载你的数据库。不要只继续使用损坏的集群。根据文档:

运行此命令后,应该可以启动服务器,但请记住,由于部分提交的事务,数据库可能包含不一致的数据。您应该立即转储数据,运行initdb,然后重新加载。重新加载后,检查不一致并根据需要进行修复。

如果您只是想将预写日志目录移动到另一个位置,则应该:

从旧位置到新的location

  • Start

的符号链接停止location

  • Start

  • Stop

或者,作为documentation says

如果日志位于与主数据库文件不同的磁盘上,这将非常有利。这可以通过将pg_xlog目录移动到另一个位置(当然是在服务器关闭时)并创建一个从主数据目录中的原始位置到新位置的符号链接来实现。

如果PostgreSQL无法启动,则说明您做错了什么。不要使用pg_resetxlog来“修复”它。撤消您的更改并找出您做错了什么。

票数 6
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12897429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档