2012-10-15 53 views
4

我已經看過Postgres的文檔和下面的簡介中給出:pg_resetxlog做什麼?它是如何工作的?

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 

回答

1

數據目錄對應於在postgresql.conf文件中的data_directory項或PGDATA環境變量,也可以住在SQL與SHOW data_directory語句查詢。它並不指向pg_xlog目錄,而是指向上一級。

要更改WAL文件的位置,必須關閉PG服務器,將pg_xlog目錄及其內容移動到新位置,應該從舊位置創建符號鏈接到新位置,然後服務器重新啓動。 pg_resetxlog不應該用於此,因爲它可能會抑制最新的事務(當所有其他操作失敗時,此工具通常用於崩潰恢復情況)。

6

pg_resetxlog是一種不得已的讓你的數據庫後再次運行工具:

  • 你刪除的文件,你不應該從pg_xlog有;

  • 由於備份系統配置錯誤,您還原了一個省略了pg_xlog目錄的文件系統級備份(這種情況發生得比您想象的要多,人們認爲「它已經登錄名稱,因此它必須不重要;我將會把它從備份中刪除「)。

  • 由於硬件故障或硬盤驅動器故障導致文件系統損壞損壞您的數據目錄;或者甚至可能是

  • PostgreSQL錯誤或操作系統錯誤會破壞預寫日誌(非常罕見)。

由於手冊說:

pg_resetxlog清理預寫日誌(WAL)[...]。如果這些文件已損壞,有時需要這個 函數。它 應該只用作最後的手段,當服務器不會啓動 由於這種腐敗。

除非你知道自己在做什麼,爲什麼不要運行pg_resetxlog。如果您不確定,請致電pgsql-general mailing listhttps://dba.stackexchange.com/

pg_resetxlog可能會破壞您的數據庫,如文檔警告。如果你必須使用它,你應該REINDEX,轉儲你的數據庫,重新initdb,並重新加載你的數據庫。不要繼續使用損壞的羣集。按照文檔:

運行此命令後,應該可以啓動服務器, 但記住數據庫可能包含因 到部分提交的事務不一致的數據。您應該立即轉儲您的 數據,運行initdb並重新加載。重新加載後,檢查不一致性 並根據需要進行修復。

如果您只是想將您的預寫日誌目錄到另一個位置,你應該:

  • 停止PostgreSQL的
  • 移動pg_xlog
  • 添加從舊位置符號鏈接新位置
  • 開始PostgreSQL

或者,正如documentation says

如果日誌距離 主數據庫文件不同的磁盤上是有利的。這可以通過將pg_xlog 目錄移動到另一個位置(當服務器關閉時爲 課程),並創建從主數據目錄中的原始位置到新位置的符號鏈接來實現。

如果PostgreSQL無法啓動,您做了錯誤的事情。不要使用pg_resetxlog來「修復」它。撤消你的改變,找出你做錯了什麼。

+0

你似乎在說「永遠不要使用pg_resetxlog」,但我只是用它,它解決了我的問題。 – Fuser97381

+1

@ Fuser97381我說它應該是絕對最後的手段,如果你被迫使用它,你應該轉儲,重新initdb和重新加載。這不是一個正常的操作,它是一個嚴重的vonsequences緊急恢復工具。 –

2

移動你的pg_xlog裏面的目錄的內容,如 '/家/富/ 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

0

你不應該手動觸摸WAL文件,這是非常清楚。

如果在pg_xlog目錄晃來晃去的文件,也就是說,有是文件與.done* in the sub-folder archive_status`這需要進行手動清理,可以用SQL命令

CHECKPOINT; 

完成結束這會強制包含清理WAL段文件的事務檢查點。

請參閱documentation for 9.3,但存在於所有當前版本的Postgresql中。

相關問題