點擊上方藍字關注我們
在任何時間,PostgreSQL在數據集簇目錄的pg_wal/子目錄下都保持有一個預寫式日志(wal)。這個日志存在的目的是為了保證崩潰后的安全:如果系統崩潰,可以“重放”從最后一次檢查點以來的日志項來恢復數據庫的一致性。
Postgresql在PITR模式下重放基礎備份下的歸檔wal數據,從pg_start_backup創建的REDO點到你要恢復的點,在postgresql中,要恢復的點稱為恢復目標。
環境如下:
操作系統:redhat6.8
數據庫:11.2
PGHOME=/db/pgsql
PGDATA=/db/pgsql_data
vipostgresql.conf archive_mode= on archive_command= cp -i %p /db/archive/%f wal_level= hot_standby |
$/db/pgsql/bin/pg_ctl -D /db/pgsql_data -l logfile start |
模擬數據
創建測試數據庫:
createdatabase aaaa; |
創建表,補充數據
CREATETABLE demo1(id int,name varchar(20)); INSERTINTO demo1 VALUES (1,’xiaowang’), (2,’zhaosi’); aaaa=#select * from demo1; id| name ----+---------- 1| xiaowang 2| zhaosi (2rows) |
aaaa=# select now(); now ------------------------------- 2021-01-19 23:41:56.476472+08 (1 row) aaaa=# select pg_start_backup(bak_ws_2021-01-19 23:41:56); pg_start_backup ----------------- 0/2000060 (1row) |
tar-cvzf pgsql_data.tar pgsql_data |
aaaa=#select pg_stop_backup(); NOTICE: pg_stop_backup complete, all required WAL segments have beenarchived pg_stop_backup ---------------- 0/2000168 (1row) aaaa=#select pg_switch_wal(); pg_switch_wal --------------- 0/3000078 (1row) |
注意:從PostgreSQL10 開始將"pg_xlog"目錄重命名為"pg_wal",所以很多網上的版本會存在查看pg_xlog
CREATETABLE demo2(id int,name varchar(20)); aaaa=#INSERT INTO demo2 VALUES (1,xiaoli),(2,zhaoqian); INSERT0 2 |
(1)結束PG服務
aaaa=#q $/db/pgsql/bin/pg_ctl -D /db/pgsql_data/ stop waitingfor server to shut down.... done serverstopped |
(2)模擬數據庫毀壞
rm-rf pgsql_data |
(3)恢復備份文件pgsql_data.tar
$tar -xvf pgsql_data.tar |
(4)刪除pg_wal文件夾并重建
$rm -rf pg_wal $ mkdir -p pg_wal/archive_status |
(5)拷貝recovery.conf文件并修改
cp$PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf |
直接添加或修改以下參數:
restore_command= cp /db/archive/%f "%p" |
以下參數可以根據需要進行添加:
archive_cleanup_command=pg_archivecleanup/db/archive %r ###一般來說,設置自動清理archive_log可以在配置文件中添加archive_cleanup_command參數。 recovery_target_time=2021-01-1923:45:12 ###recovery_target_time這是用戶自行設定的,如果不寫則會恢復到之前接收到的最后一個歸檔文件。 |
(6)啟動數據庫:
$/db/pgsql/bin/pg_ctl -D /db/pgsql_data -l logfile start pg_ctl:another server might be running; trying to start server anyway waitingfor server to start.... done serverstarted $/db/pgsql/bin/psql postgres postgres psql(11.2) Type"help" for help. postgres=#c aaaa Youare now connected to database "aaaa" as user "postgres". aaaa=#dt Listof relations Schema| Name | Type | Owner --------+-------+-------+---------- public| demo1 | table | postgres public| demo2 | table | postgres (2rows) aaaa=#select * from demo2; id| name | age ----+----------+----- 1| xiaoli | 2| zhaoqian | |
(7)查看日志,恢復成功
注:結束后,recovery.conf會改名變成recovery.done。
總結:PITR技術對7*24小時支撐很重要,對于數據庫體量很小的,可以增加pg_dump備份頻率,對于體量較大數據庫就很需要了。需要注意的是pg_dump和pg_dumpall不會產生文件系統級別的備份,并且不能用于連續歸檔方案。這類轉儲是邏輯的并且不包含足夠的信息用于wal重放。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130023.html
摘要:指定要用于查找的口令文件的名稱。前四個字段可以是確定的字面值,也可以使用通配符匹配所有。利用環境變量引用的文件權限也要滿足這個要求,否則同樣會被忽略。在上,該文件被假定存儲在一個安全的目錄中,因此不會進行特別的權限檢查。 pg_dump pg_dump 把一個數據庫轉儲為純文本文件或者是其它格式. 用法: pg_dump [選項]... [數據庫名字] 一般選項: -f, --fi...
摘要:摘要第九屆中國數據庫技術大會,阿里云數據庫產品專家蕭少聰帶來以阿里云如何打破遷移上云的壁壘為題的演講。于是,阿里云給出了上面的解決方案。 摘要: 2018第九屆中國數據庫技術大會,阿里云數據庫產品專家蕭少聰帶來以阿里云如何打破Oracle遷移上云的壁壘為題的演講。Oracle是指數據庫管理系統,面對Oracle遷移上云的壁壘,阿里云如何能夠打破它呢?本文提出了Oracle 到云數據庫P...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20