1. 程式人生 > >postgresql 的三種日誌

postgresql 的三種日誌

最近在模擬主備切換,備機可以成功切換成主機,但是主機未成功切換成備機,翻閱資料後發現是日誌歸檔設定的問題。

情景描述:主從複製,模擬主機當掉,主從切換。從機成功切換為主機,但主機切換為從機後服務無法啟動,檢視日誌後,報如下錯誤:

ERROR:  requested WAL segment 000000020000000000000030 has already been removed

根據報錯資訊,知道是由於在停機過程中,新備庫所需的WAL已經被主庫迴圈使用覆蓋了,而在備庫停機維護過程中,新主庫並未開啟歸檔。

結果是:新備庫需要重做。

如主庫開啟歸檔,那麼在備庫重新恢復後,有了主庫的歸檔,備庫依然可以跟上主庫。

主備切換和日誌歸檔的實驗場景會在後面單獨寫,今天先寫下為了解決這個問題學到的其他知識。

當然為了研究這個問題,我發現對日誌的概念很模糊,到底有多少日誌,各自有什麼樣的功能不是很清楚,查閱後,整理如下:

PostgreSQL中有三種日誌,pg_log,pg_xlog和pg_clog。分別記錄一下,提醒自己。

OS:windows7

版本:postgresql9.5

一.路徑
預設路徑為C:\Program Files\PostgreSQL\9.5\data,可以自定義資料夾地址。

二 .用處 
pg_log 
該資料夾中的日誌一般用來記錄伺服器與DB的狀態,如各種Error資訊,定位慢查詢SQL,資料庫的啟動關閉資訊,發生checkpoint過於頻繁等的告警資訊等。linux自帶的路徑一般在/var/log/postgres下面。該日誌有.csv格式和.log。這種日誌是可以被清理刪除不影響DB的正常執行。

當我們有遇到DB無法啟動或者更改引數沒有生效時,第一個想到的就是檢視這個日誌。 

如果服務無法啟動,該日誌資料夾下的日誌沒有記錄,建議檢視作業系統的事件檢視器的日誌。有助於快速定位問題。第一次有意識去看事件檢視器的日誌還是翔哥傳授,謝謝翔哥哈,雖然我@他他也看不見~~~~

pg_xlog

該資料夾中的日誌是記錄的Postgresql的WAL資訊,也就是一些事務日誌資訊(transaction log),預設單個大小是16M,原始碼安裝的時候可以更改其大小。這些資訊通常名字是類似'000000010000000000000013'這樣的檔案,這些日誌會在 定時回滾恢復(PITR), 流複製(Replication Stream)以及歸檔時能被用到,這些日誌是非常重要的,記錄著資料庫發生的各種事務資訊,不得隨意刪除或者移動這類日誌檔案,不然你的資料庫會有無法恢復的風險

 

當歸檔或者流複製發生異常的時候,事務日誌會不斷地生成,有可能會造成磁碟空間被塞滿,最終導致DB掛掉或者起不來。遇到這種情況不用慌,可以先關閉歸檔或者流複製功能,備份pg_xlog日誌到其他地方,但請不要刪除。然後刪除較早時間的的pg_xlog,有一定空間後再試著啟動Postgres。 

pg_clog 
pg_clog這個檔案也是事務日誌檔案,但與pg_xlog不同的是它記錄的是事務的元資料(metadata),這個日誌告訴我們哪些事務完成了,哪些沒有完成。這個日誌檔案一般非常小,但是重要性也是相當高,不得隨意刪除或者對其更改資訊

總結:
pg_log記錄各種Error資訊,以及伺服器與DB的狀態資訊,可由使用者隨意更新刪除
pg_xlog與pg_clog記錄資料庫的事務資訊,不得隨意刪除更新,做物理備份時要記得備份著兩個日誌。