我查看了 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
pg_resetxlog http://www.postgresql.org/docs/current/static/app-pgresetxlog.html是在以下情况后让数据库再次运行的最后手段:
您删除了不该删除的文件pg_xlog
;
您恢复的文件系统级备份省略了pg_xlog
由于备份系统配置错误而导致的目录错误(这种情况发生的次数比您想象的要多,人们认为“它已登录该名称,因此它一定不重要;我会将其排除在备份之外”)。
由于硬件故障或硬盘驱动器故障导致的文件系统损坏损坏了您的数据目录;或什至有可能
PostgreSQL bug 或操作系统 bug 损坏了预写日志(极其罕见)。
正如手册所说:
pg_resetxlog 清除预写日志(WAL)[...]。这
如果这些文件已损坏,有时需要使用此功能。它
仅应作为服务器无法启动时的最后手段
由于这样的腐败。
别跑pg_resetxlog
除非你确切地知道自己在做什么以及为什么。如果您不确定,请询问pgsql-通用邮件列表 http://archives.postgresql.org/pgsql-general/ or on https://dba.stackexchange.com/ https://dba.stackexchange.com/.
pg_resetxlog
可能会损坏您的数据库,正如文档警告的那样。如果你必须使用它,你应该REINDEX
、转储数据库、重新初始化数据库并重新加载数据库。不要继续使用损坏的集群。根据文档:
运行此命令后,应该可以启动服务器,
但请记住,由于数据库可能包含不一致的数据
部分提交的交易。你应该立即抛弃你的
数据,运行 initdb,然后重新加载。重新加载后,检查是否有不一致的情况
并根据需要进行修复。
如果您只是想将预写日志目录移动到另一个位置,您应该:
- 停止 PostgreSQL
- Move
pg_xlog
- 添加从旧位置到新位置的符号链接
- 启动 PostgreSQL
或者,作为文件说 http://www.postgresql.org/docs/current/static/wal-internals.html:
如果日志位于与日志不同的磁盘上,这是有利的。
主要数据库文件。这可以通过移动 pg_xlog 来实现
目录到另一个位置(当服务器关闭时,
course)并从原始位置创建符号链接
主数据目录移动到新位置。
如果 PostgreSQL 无法启动,则表明您做错了什么。不使用pg_resetxlog
要解决这个问题。撤消您的更改并找出您做错了什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)