我查看了postgres文档,下面给出了概要:
pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid,fileid,seg ] datadir
Run Code Online (Sandbox Code Playgroud)
但是在文档中没有任何地方可以解释数据的含义.是它%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
Run Code Online (Sandbox Code Playgroud)
pg_resetxlog 在以下情况之后再次运行数据库是最后的工具:
你删除了你不应该拥有的文件pg_xlog;
您恢复了pg_xlog由于备份系统配置错误而忽略该目录的文件系统级备份(这种情况比您想象的要多,人们认为"它已经登录了名称所以它必须是不重要的;我会将其排除在外备份").
由于硬件故障或硬盘驱动器故障导致的文件系统损坏损坏了您的数据目录; 甚至可能
PostgreSQL错误或操作系统错误损坏了预写日志(非常罕见).
正如手册所说:
pg_resetxlog清除预写日志(WAL)[...].如果这些文件已损坏,有时需要此功能.当服务器由于这种损坏而无法启动时,它应该仅作为最后的手段使用.
pg_resetxlog除非你确切知道自己在做什么以及为什么这样做,否则不要跑.如果您不确定,请在pgsql-general邮件列表或https://dba.stackexchange.com/上询问.
pg_resetxlog文档警告说,可能会损坏您的数据库.如果必须使用它,则应该REINDEX转储数据库,重新initdb并重新加载数据库.不要只是继续使用损坏的群集.根据文件:
运行此命令后,应该可以启动服务器,但请记住,由于部分提交的事务,数据库可能包含不一致的数据.您应该立即转储数据,运行initdb并重新加载.重新加载后,检查是否存在不一致情况并根据需要进行修复.
如果您只想将预写日志目录移动到其他位置,则应该:
pg_xlog或者,正如文档所说:
如果日志位于与主数据库文件不同的磁盘上,则是有利的.这可以通过将pg_xlog目录移动到另一个位置(当然,当服务器关闭时)并创建从主数据目录中的原始位置到新位置的符号链接来实现.
如果PostgreSQL无法启动,那你就做错了.不要pg_resetxlog用来"修理"它.撤消您的更改并找出您做错的事情.
数据目录对应于data_directorypostgresql.conf 文件中的条目或PGDATA环境变量,也可以使用 SQL 语句实时查询SHOW data_directory。它不指向pg_xlog目录,而是指向上一级目录。
要更改 WAL 文件的位置,必须关闭 PG 服务器,将pg_xlog目录及其内容移动到新位置,应创建从旧位置到新位置的符号链接,然后重新启动服务器。pg_resetxlog不应该用于此目的,因为它可能会抑制最新的事务(此工具通常用于当其他所有方法都失败时的崩溃恢复情况)。
| 归档时间: |
|
| 查看次数: |
15821 次 |
| 最近记录: |