pgsql 時間線

PGSql時間線

在pgsql中什麼是時間線?
時間線主要是爲了解決wal文件覆蓋的問題。
如果沒有時間線會有什麼問題?
舉個例子:
假如在週一9:00刪除了一個表,週三發現刪錯了,這時候要做時間點恢復。週三下午3點通過基礎備份和WAL文件,把數據庫恢復到了週一8:50這個時刻。恢復後的數據庫繼續運行,到週五,發現刪除那個表沒有必要恢復,想再把數據庫恢復到週三下午2:30的時間點。如果在週三下午3點做了基礎備份,可以直接恢復,如果沒有做基礎備份,想通過WAL日誌來恢復,沒有時間線,就存在問題。沒有時間線,因爲數據庫一直在運行,會產生新的WAL文件,會把原來的覆蓋掉。
再來看一下wal文件命名規則就更容易理解了
文件名字以十六進制表示且分爲三個部分,第一部分是時間線標識(timelineid),一般保持該部分值不變。第二部分是文件標識ID(fileid,seg)第三部分是區段ID(seg)且值不能超過255,即0xFF。

00000001 00000000 000000AB      

時間線:英文爲timeline,是以1開始的遞增數字,如1,2,3…
LogId:32bit長的一個數字,是以0開始遞增的數字,如0,1,2,3…
LogSeg:32bit長的一個數字,是以0開始遞增的數字,如0,1,2,3…

無論何時當一次歸檔恢復完成,一個新的時間線被創建來標識恢復之後生成的WAL記錄序列。時間線ID號是WAL段文件名的一部分,因此一個新的時間線不會重寫由之前的時間線生成的WAL數據。
考慮到你不太確定需要恢復到哪個時間點的情況,你可能不得不做多次時間點恢復嘗試和錯誤,直到最終找到從舊歷史中分支出去的最佳位置。如果沒有時間線,該處理將會很快生成一堆不可管理的混亂。而有了時間線,你可以恢復到任何之前的狀態,包括早先被你放棄的時間線分支中的狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章