postgresql 的三種日誌

2021-07-11 12:32:52 字數 1793 閱讀 9626

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

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

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記錄資料庫的事務資訊,不得隨意刪除更新,做物理備份時要記得備份著兩個日誌。

PostgreSQL 10 0 的三種日誌

當前使用版本為postgresql postgres localhost psql psql 10.7 網路上還存在大量的帖子,關於pg log,xlog,clog 剛剛接觸pg的我一直沒有找到這些目錄,查資料發現,從pg 10.0開始,目錄的名稱已經更改 pg xlog pg wal wal 日誌...

PostgreSQL的三種表連線方式簡述

我們知道postgresql有三種表連線方式,分別是巢狀迴圈連線 nestloop join 雜湊連線 hash join 排序合併連線 merge join 這三種連線方式是如何工作的呢?如果你熟悉oracle的話,應該會發現著三種連線方式與oracle是一樣的。nestloop join 巢狀迴...

mysql三種binlog日誌的理解

最近,一直在糾結要不要改資料庫binlog的日誌格式,原先用的是row格式,導致資料庫binlog日誌較大,磁碟空間本來也不是很大,所以就想看看能不能改變binlog日誌。在該binlog日誌之前,先查詢乙份關於binlog日誌的講解,記錄如下 一,mysql binlog共有三種日誌 statem...