我已经看过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来“修复”它。撤消您的更改并找出您做错了什么。
发布于 2013-10-03 18:35:35
将pg_xlog目录的内容移动到所需的位置,如'/home/foo/pg_xlog‘
mv pg_xlog/* /home/foo/pg_xlog删除pg_xlog目录
rm -rf pg_xlog创建pg_xlog的软链接
ln -s /home/foo/pg_xlog pg_xlog验证链接
ls -lrt pg_xlog注意: pg_resetxlog不是移动pg_xlog的合适工具请阅读
http://www.postgresql.org/docs/9.2/static/app-pgresetxlog.html
发布于 2012-10-15 23:44:11
数据目录对应于postgresql.conf文件中的data_directory条目或PGDATA环境变量,也可以使用SHOW data_directory语句在SQL中实时查询。它不指向pg_xlog目录,而是指向上一级目录。
要更改WAL文件的位置,必须关闭PG服务器,将pg_xlog目录及其内容移动到新位置,创建从旧位置到新位置的符号链接,然后重新启动服务器。pg_resetxlog不应该用于此目的,因为它可能会抑制最新的事务(此工具通常用于所有其他方法都失败时的崩溃恢复情况)。
https://stackoverflow.com/questions/12897429
复制相似问题