postgresql 利用xlog進(jìn)行熱備操作
一、驗(yàn)證postgresql增量合并的方案
結(jié)果:沒(méi)有有效可行的增量合并方案,暫時(shí)放棄
二、梳理postgresql基于wal的增量備份
物理備份與還原適用于跨小版本的恢復(fù)但是不能跨平臺(tái)
邏輯備份與還原備份數(shù)據(jù)適用于跨版本和跨平臺(tái)的恢復(fù)
postgersql增量備份步驟
1.首先創(chuàng)建歸檔目錄
例如:歸檔目錄為/archive_pg_xlog/xlog
1>mkdir -p /archive_pg_xlog/xlog 2>chown -R postgres:postgres /archive_pg_xlog/xlog 3>chmod 700 /archive_pg_xlog/xlog
2.修改postgresql.conf配置文件
1>wal_level=archive(配置wal的級(jí)別) 2>archive_mode=on(開(kāi)啟歸檔) 3>archive_command='DATE=`date +%Y%m%d`;DIR="/archive_pg_xlog/xlog/$DATE";(test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f'(配置歸檔路徑)
3.重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)
systemctl restart postgresql(使配置生效)
4.做全量備份
1>psql -c 'select pg_start_backup(now()::text);',#執(zhí)行該命令表示開(kāi)始備份 2>tar -cf base.tar /var/lib/pgsql/data/* 3>psql -c 'select pg_stop_backup();'#tar結(jié)束后要關(guān)閉備份
5.如果表空間存在,還需要備份表空間,沒(méi)有則不需要
6.以上操作完成后,增量備份就自動(dòng)開(kāi)始了
當(dāng)xlog寫(xiě)滿后,就自動(dòng)歸檔到我們指定的目錄了
postgresql利用xlog進(jìn)行還原
模擬災(zāi)難,直接刪除data目錄(或者是data目錄下的所有文件丟失)
先檢查數(shù)據(jù)庫(kù)是否已經(jīng)停止,如果還未停止需要停止
mkdir data;chown postgres:postgres data;chmod 700 data
將備份的base.tar全量包拷貝到data目錄,解壓
cp /usr/share/psql/recovery.conf.sample ./data vim recovery.conf.sample配置restore_command='' chown postgres:postgres recovery.conf.sample;chmod 700 recovery.conf.sample;mv recovery.conf.sample recovery.conf
啟動(dòng)數(shù)據(jù)庫(kù),當(dāng)recovery.conf變成了recovery.done時(shí)即表示恢復(fù)完成
注:xlog文件名由時(shí)間線TimeLineID(8位16進(jìn)制)、邏輯日志文件號(hào)(8位16進(jìn)制)和段文件ID(8位16進(jìn)制)組成
測(cè)試1.
第一次全量時(shí),db有一百萬(wàn)條數(shù)據(jù),然后再次插入一百萬(wàn)條數(shù)據(jù),模擬災(zāi)難,正?;謴?fù)
第二次全量時(shí),是在第一次模擬災(zāi)難后的場(chǎng)景,即第二次全量備份時(shí)有兩百萬(wàn)條數(shù)據(jù),再次插入十萬(wàn)條數(shù)據(jù),模擬災(zāi)難,正?;謴?fù)
測(cè)試2.
再次模擬災(zāi)難,在第二次全備份新增十萬(wàn)條數(shù)據(jù)后,直接刪掉data目錄
用第一次的全備份數(shù)據(jù)結(jié)合產(chǎn)生的增量來(lái)進(jìn)行恢復(fù),結(jié)果,只有兩百萬(wàn)條數(shù)據(jù),說(shuō)明該增量不可合并
測(cè)試3.
模擬某個(gè)xlog文件丟失時(shí)
結(jié)果:丟失的xlog文件只影響該丟失的xlog文件依賴的全量備份(會(huì)導(dǎo)致數(shù)據(jù)丟失),但是不會(huì)影響xlog文件丟失后面的全量備份
對(duì)于丟失這種情況暫時(shí)還沒(méi)有找到恢復(fù)的辦法
如果要還原到最近的那一次,也就是不是因?yàn)檎`操作的等原因的恢復(fù),則不需要配置還原點(diǎn)
recovery_target_name=''(這個(gè)是還原點(diǎn)的名字) recovery_target_time=''(這個(gè)是要還原到的具體時(shí)間點(diǎn)) recovery_target_xid='' (以最后結(jié)束時(shí)的id為準(zhǔn))
創(chuàng)建還原點(diǎn),也就是還原點(diǎn)的名字select pg_create_restore_point('pitr_test');
創(chuàng)建基于時(shí)間的還原點(diǎn),select now();
創(chuàng)建基于xid的還原點(diǎn),select txid_current();
補(bǔ)充:PostgreSQL中的log, xlog和clog
pg_log
$PGDATA/pg_log是數(shù)據(jù)庫(kù)運(yùn)行活動(dòng)日志的默認(rèn)保存目錄,它包括錯(cuò)誤信息,查詢?nèi)罩疽约皢?dòng)/關(guān)閉數(shù)據(jù)庫(kù)的信息。當(dāng)PostgreSQL啟動(dòng)失敗時(shí),這里應(yīng)該是你第一個(gè)應(yīng)該查看的信息。一些Linux發(fā)行版以及其他的軟件包管理系統(tǒng)會(huì)將這個(gè)日志目錄移到某些地方,比如:/var/log/postgresql
你可以在pg_log目錄里自由地刪除、重命名、壓縮或者移動(dòng)文件而不會(huì)有什么不好的結(jié)果,只要Postgres用戶仍然有權(quán)限寫(xiě)該目錄。如果pg_log隨著許多大文件而膨脹,你可能需要在postgresql.conf里減小你想記錄日志的事件。
pg_xlog
$PGDATA/pg_xlog是PostgreSQL的事務(wù)日志。 這是一些二進(jìn)制日志文件的集合,文件名類(lèi)似00000001000000000000008E,它包含最近事務(wù)的一些描述數(shù)據(jù)。這些日志也被用于二進(jìn)制復(fù)制。如果復(fù)制、歸檔或者PITR失敗了,當(dāng)歸檔正在恢復(fù)時(shí),這個(gè)目錄保存的數(shù)據(jù)庫(kù)日志可能會(huì)膨脹數(shù)GB。這可能會(huì)導(dǎo)致你用完你的磁盤(pán)空間。不像pg_log,你不能自由地刪除、移動(dòng)或者壓縮這個(gè)目錄的文件。你甚至不能在沒(méi)有符號(hào)鏈接到該目錄的情況下移動(dòng)這個(gè)目錄。刪除pg_xlog的文件可能會(huì)導(dǎo)致不可恢復(fù)的數(shù)據(jù)庫(kù)損壞。
如果你發(fā)現(xiàn)自己處在這樣的情況:你發(fā)現(xiàn)有100G大小的文件在pg_xlog目錄并且數(shù)據(jù)也啟動(dòng)不了,并且你已經(jīng)禁止歸檔/復(fù)制并且嘗試清理磁盤(pán)空間等任何其他的方式,請(qǐng)做以下兩個(gè)步驟:
1、從pg_xlog目錄里移動(dòng)文件到一個(gè)備份磁盤(pán)或者共享網(wǎng)絡(luò)驅(qū)動(dòng)器中,也不要?jiǎng)h除它們。
2、移動(dòng)一些最老的文件,直到足夠允許PostgreSQL啟動(dòng)起來(lái)。
pg_clog
$PGDATA/pg_clog包含了事務(wù)的元數(shù)據(jù)。這種日志用于告訴PostgreSQL哪個(gè)事務(wù)已經(jīng)完成、哪個(gè)還沒(méi)有完成。clog是比較小的并且沒(méi)有任何理由會(huì)膨脹,所以,你應(yīng)該沒(méi)有任何理由去碰觸它。在任何時(shí)候你都不應(yīng)該從pg_clog里刪除文件,如果你這樣子做,還不如完全地刪除整個(gè)數(shù)據(jù)庫(kù)目錄。缺少clog是不可恢復(fù)的。請(qǐng)注意,這意味著,如果你在$PGDATA目錄里備份文件,你應(yīng)該確定同時(shí)包含pg_clog和pg_xlog,否則你可能會(huì)發(fā)現(xiàn)你的備份是不可用的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
CentOS中運(yùn)行PostgreSQL需要修改的內(nèi)核參數(shù)及配置腳本分享
這篇文章主要介紹了CentOS中運(yùn)行PostgreSQL需要修改的內(nèi)核參數(shù)及配置腳本分享,本文從系統(tǒng)資源限制類(lèi)和內(nèi)存參數(shù)優(yōu)化類(lèi)來(lái)進(jìn)行說(shuō)明,需要的朋友可以參考下2014-07-07PostgreSQL使用MySQL外表的步驟詳解(mysql_fdw)
這篇文章主要介紹了PostgreSQL使用MySQL外表的步驟(mysql_fdw),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01pg中replace和translate的用法說(shuō)明(數(shù)據(jù)少的中文排序)
這篇文章主要介紹了pg中replace和translate的用法說(shuō)明(數(shù)據(jù)少的中文排序),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01PostgreSQL LIST、RANGE 表分區(qū)的實(shí)現(xiàn)方案
這篇文章主要介紹了PostgreSQL LIST、RANGE 表分區(qū)的實(shí)現(xiàn)方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01在Ubuntu中安裝Postgresql數(shù)據(jù)庫(kù)的步驟詳解
PostgreSQL 是一款強(qiáng)大的,開(kāi)源的,對(duì)象關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)。它支持所有的主流操作系統(tǒng),包括 Linux、Unix(AIX、BSD、HP-UX,SGI IRIX、Mac OS、Solaris、Tru64) 以及 Windows 操作系統(tǒng)。本文給大家介紹了在Ubuntu中安裝Postgresql數(shù)據(jù)庫(kù)的步驟,需要的朋友可以參考下。2017-09-09聊聊PostgreSql table和磁盤(pán)文件的映射關(guān)系
這篇文章主要介紹了聊聊PostgreSql table和磁盤(pán)文件的映射關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01PostgreSQL教程(二十):PL/pgSQL過(guò)程語(yǔ)言
這篇文章主要介紹了PostgreSQL教程(二十):PL/pgSQL過(guò)程語(yǔ)言,本文講解了、PL/pgSQL概述、PL/pgSQL的結(jié)構(gòu)、聲明、基本語(yǔ)句、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下2015-05-05PostgreSQL12同步流復(fù)制搭建及主備切換方式
這篇文章主要介紹了PostgreSQL12同步流復(fù)制搭建及主備切換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03