原创 PostgreSQL備機checkpoint

  數據庫異常關閉時,數據庫關閉時來不及或者沒機會做checkpoint,則需要從上一個一致性檢查的開始恢復。     PostgreSQL備機checkpoint是不能產生checkpoint WAL的,因爲如果寫這樣類型的checkpo

原创 PostgreSQL邏輯備份pg_dump使用及其原理解析

一、原理分析 1、循環調用getopt_long解析命令行參數,將參數保存到static DumpOptions dopt;中2、判斷參數是否相容,不相容則退出: options -s/--schema-only and -a/--

原创 PostgreSQL邏輯備份恢復--pg_dump導出及psql導入案例

數據庫導入導出是最常用的功能之一。PostgreSQL的備份工具可以使用pg_dump及pg_dumpall。可以通過pg_dump --help獲取其使用方法。這裏不對其做過多介紹。主要介紹在使用pg_dump及恢復過程中遇到的一個問題。

原创 PostgreSQL用戶密碼如何通過md5加密存儲,是否加了salt

一、PG用戶的密碼如何通過md5加密,並且是否加了salt?本文將從源碼角度跟蹤分析。 PG用戶通過md5加密時,加了salt,而這個salt是用戶名字符串。 二、源碼分析 CreateRole: shadow_pass = enc

原创 PostgreSQL如何刪除不使用的xlog文件

一、問題經常會在複製的時候遇到這樣的問題,需要複製的xlog文件找不到了。那麼xlog文件什麼時候刪除?又會刪除多少保留多少個xlog文件?都有哪些xlog文件需要保留?本文將從原理上對這些問題進行解讀。 二、原理每次checkpoint後

原创 PostgreSQL構建流複製拉取日誌的起始位置在哪裏

WaitForWALToBecomeAvailable: if (!InArchiveRecovery) currentSource = XLOG_FROM_PG_WAL; else if (currentS

原创 PostgreSQL啓動恢復期間,恢復到的時間線的確定

1、啓動恢復時,確定恢復到的時間線recoveryTargetTLI 1)歸檔恢復點比checkpoint中記錄的時間線大,那麼選擇歸檔恢復點作爲目標時間線 2)否則,checkpoint記錄中的時間線作爲目標時間線StartupXLOG-

原创 PostgreSQL checkpoint--shutdown

PostgreSQL在shutdown時會進行checkpoint。其流程如下。 1、在主進程中,會首先註冊一個信號處理函數reaper,用於向checkpoint等子進程發送信號。向checkpoint進程發送SIGUSR2信號 Post

原创 PostgreSQL pg_ctl start超時分析

一、問題pg_ctl start啓動時報錯退出:pg_ctl:server did not start in time。超時時間是多少?從什麼時候到哪個階段算超時? 二、分析:該信息打印位置,從後面代碼段do_start函數中可以看出1、p

原创 PostgreSQL server端接收連接後fork進程

main->PostmasterMain->ServerLoop: for(;;){ ... //會阻塞在這,監視文件描述符的變化 selres = select(nSockets, &rmask, NULL, NULL, &

原创 死鎖案例二

1、環境說明MySQL5.6.33,隔離級別是RR。表結構及數據:Create table t1(id int not null primary key auto_increment,c1 int,c2 int,c3 int, unique

原创 PostgreSQL狀態變遷

typedef enum DBState { DB_STARTUP = 0, DB_SHUTDOWNED, DB_SHUTDOWNED_IN_RECOVERY, DB_SHUTDOWNING, DB_IN_CRASH_RECOVE

原创 PostgreSQL pg_rewind原理

一、背景常見的高可用架構中,如果master掛了且有數據沒有同步到備,高可用系統會提升備爲主對外服務。對於老主有可能再以備的身份加入集羣時,可能搭建流複製關係失敗。可以用pg_rewind工具使主備的數據一致。 二、pg_rewind原理三

原创 死鎖案例三

1、環境說明MySQL5.6.33,隔離級別是RR。表結構及數據:create table t2 (   id int primary key auto_increment ,   c1 int ,   c2 int ,   key (c1