PostgreSQL pg_rewind例項--could not find previous WAL record at %X/%X
一、介紹
作為pg_rewind報錯章節補充一個用例,說明其用法。
二、例項
1、history檔案
--新主 $ cat 00000004.history 1 0/140000C8 no recovery target specified 2 0/19000060 no recovery target specified 3 0/1F000090 no recovery target specified --老主 $ cat 00000003.history 1 0/140000C8 no recovery target specified 2 0/19000060 no recovery target specified
2、查詢分叉點
說明:findCommonAncestorTimeline:
1)比較sourceHistory[0]、targetHistory[0]的時間線和begin的值,可以得出兩者相等,則轉到第2個條目的比較
2)比較sourceHistory[1]、targetHistory[1]的時間線和begin的值,可以得出兩者相等,則轉到第3個條目的比較
3)比較sourceHistory[2]、targetHistory[2]的時間線和begin的值,可以得出兩者相等,此時比較結束
4)取第3個條目進行返回:MinXLogRecPtr(sourceHistory[i].end, targetHistory[i].end),此時返回的是sourceHistory[i].end的值作為分叉點,即 0/1F000090
3、此時ControlFile_target.checkPoint < divergerec && target的chkptendrec!=divergerec,所以可以進行pg_rewind
4、findLastCheckpoint查詢分叉點divergerec之前最近的checkpoint作為rewind起點。
1)首先需要定位到分叉點divergerec開始的記錄,然後根據該記錄的xl_prev指標定位前一個wal記錄
2)判斷第1)步得到的wal記錄是否是checkpoint,如果不是則重新返回到第1),直到找到checkpoint點
3)這裡就有個問題,如果得到的分叉點正好是老主結束位置,即本例:1F000090為分叉點,實際上是老主和新主沒有發生資料分叉,可以認為是沒有作為備沒有接收完新主資料呢
4)target從1F000090這個位置開始獲取prev指標向前找checkpoint時,因為這個位置後都是0了,所以不能繼續向下遍歷找了,報錯:could not find previous WAL record at %X/%X
三、小結
這裡pg_rewind執行時,判斷不出來沒有分叉的情景,即本文的場景。此時執行pg_rewind會報錯,讓使用者還以為WAL檔案由損壞導致執行pg_rewind失敗。這個工具如果能夠將這種場景識別出來,報不需要rewind是不是更好?
四、pg_rewind原理及報錯流程分析參考
http://blog.itpub.net/31493717/viewspace-2639207/
http://blog.itpub.net/31493717/viewspace-2286140/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2644827/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iPhone X和Find X對比評測 OPPO Find X和iPhone X哪個好?iPhone
- OPPO Find X全面評測 OPPO Find X值得買嗎?
- 四種OPPO Find X截圖方法 OPPO Find X怎麼截圖?
- OPPO Find X效能測試 驍龍845加持OPPO Find X跑分多少?
- PostgreSQL pg_rewind原理SQL
- OPPO Find X怎麼樣?OPPO Find X優缺點 網友一針見血
- vivo nex和oppo find x區別對比 OPPO Find X和vivo NEX哪個好?
- OPPO Find X上市時間與價格預測 OPPO Find X什麼時候釋出?
- PostgreSQL pg_rewind 報錯分析SQL
- PostgreSQL9.x,10,11hash分割槽表用法舉例SQL
- OPPO Find X三版本區別對比 OPPO Find X三版本哪個好?
- OPPO Find系列未來旗艦Find X,歸來再戰“江湖”
- PostgreSQL的wal_buffersSQL
- PostgreSQL WAL解析:構建WAL記錄準備SQL
- Could not initialize class sun.awt.X11GraphicsEnvironment 報錯
- NGINX+PHP+POSTGRESQL+ZABBIX 5.XNginxPHPSQL
- PostgreSQL email list:nvm wal bufferSQLAI
- Fatal error: Uncaught PDOException: could not find driverErrorException
- Could not initialize class sun.awt.X11GraphicsEnvironment解決方案
- find /path/to/search -type d -perm -o=x ! -perm -o=rw
- Cannot find a valid baseurl for repo: base/7/x86_64
- CentOS7.X安裝postgresql-10.3CentOSSQL
- x == (x = y) 不等於 (x = y) == x ?
- PostgreSQL DBA(14) - WAL基本術語SQL
- Could not initialize class sun.awt.X11GraphicsEnvironment異常處理
- OPPO Find X有NFC功能嗎?答案或許令人失望
- PostgreSQL DBA(32) - HA#1(pg_rewind切換)SQL
- vue3 Could not find a declaration file for moduleVue
- Java RMI遇到的Connection refused to Host: 127.x.x.x/192.x.x.x/10.x.x.x問題解決方法Java
- PostgreSQL 原始碼解讀(104)- WAL#1(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(105)- WAL#2(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(106)- WAL#3(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(107)- WAL#4(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(110)- WAL#6(Insert&WAL - XLogRe...SQL原始碼
- PostgreSQL 原始碼解讀(111)- WAL#7(Insert&WAL - XLogRe...SQL原始碼
- PostgreSQL 原始碼解讀(113)- WAL#9(Insert&WAL - CopyXL...SQL原始碼
- PostgreSQL DBA(15) - WAL檔案結構SQL
- PostgreSQL DBA(172) - PG 13(WAL activity in EXPLAIN)SQLAI