在 PostgreSQL 數(shù)據(jù)庫(kù);目前是不支持類(lèi)似 Oracle 閃回特性;我們知道 Oracle 閃回特性在數(shù)據(jù)恢復(fù)是非常簡(jiǎn)單給力。增加數(shù)據(jù)庫(kù)操作人員(開(kāi)發(fā),DBA)的容錯(cuò)率。Oracle 閃回特性使用場(chǎng)景:
創(chuàng)新互聯(lián)專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、宕昌網(wǎng)絡(luò)推廣、成都小程序開(kāi)發(fā)、宕昌網(wǎng)絡(luò)營(yíng)銷(xiāo)、宕昌企業(yè)策劃、宕昌品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供宕昌建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:aaarwkj.com flashback database: 數(shù)據(jù)庫(kù)閃回;多用于數(shù)據(jù)庫(kù)恢復(fù);數(shù)據(jù)庫(kù),用戶,表空間誤刪。 flashback table : 表閃回;用于數(shù)據(jù)表恢復(fù);數(shù)據(jù)表誤刪。 flashback query : 閃回查詢(xún);應(yīng)用于修復(fù)誤操作數(shù)據(jù)。對(duì)于 PostgreSQL 閃回;校長(zhǎng)(德哥)有寫(xiě)過(guò)一系列的文章PostgreSQL flashback(閃回)功能實(shí)現(xiàn)與介紹;如今我取巧實(shí)現(xiàn) PostgreSQL 閃回特性。原理參考我之前的文章PostgreSQL恢復(fù)誤刪數(shù)據(jù)。
支持在線數(shù)據(jù)庫(kù)恢復(fù)(不推薦),多用于數(shù)據(jù)表恢復(fù),修復(fù)誤操作數(shù)據(jù)。 支持多次閃回操作;在 flashback query 中恢復(fù)的時(shí)間點(diǎn)不是很理想;可以重新設(shè)定時(shí)間點(diǎn)再閃回操作一次。 一. flashback 所需命令實(shí)現(xiàn) flashback 就是一個(gè)有效的數(shù)據(jù)庫(kù)備份/恢復(fù)。
備份操作命令有 scp/cp, pg_basebackup, pg_rman。我選 pg_basebackup。因?yàn)閜g_basebackup 支持異構(gòu)備份。意味著可以在同一臺(tái)服務(wù)器在 cp 一個(gè) PostgreSQL 實(shí)例。即可以在一臺(tái)服務(wù)器上實(shí)現(xiàn)閃回。 恢復(fù)操作有 copy 或者 pg_dump 命令。 二. flashback 所需條件實(shí)現(xiàn) flashback 可以是在線服務(wù)器上操作,也可以是在另一臺(tái)服務(wù)器上操作。換句話說(shuō):可以是一臺(tái)服務(wù)器或者是兩臺(tái)服務(wù)器來(lái)實(shí)現(xiàn)。在一臺(tái)服務(wù)器上需要更改數(shù)據(jù)庫(kù)端口。由于本環(huán)境有清理目錄操作;避免在在線服務(wù)器上誤刪目錄。所以建議用兩條服務(wù)器來(lái)實(shí)現(xiàn)。
三. flashback 搭建原理本文檔采用兩臺(tái)服務(wù)器來(lái)實(shí)現(xiàn)。兩臺(tái)服務(wù)器時(shí)間校準(zhǔn),免密碼登錄。
正式數(shù)據(jù)庫(kù)環(huán)境:192.168.1.201 閃回?cái)?shù)據(jù)庫(kù)環(huán)境:192.168.1.202cleandir腳本用于在pg_basebackup備份前;先清空備份所需的路徑
psql -h 192.168.1.201 -p $PGPORT -t -A -n -cSELECT pg_catalog.pg_tablespace_location(oid) AS Location FROM pg_catalog.pg_tablespace where spcname not in (\'pg_default\',\'pg_global\') -o tablespace_location.txt awk \'{print rm -rf $1}\' tablespace_location.txt > cleandir.sh echo rm -rf $PGDATA >> cleandir.sh3.2 創(chuàng)建備份腳本pg_backup.sh
采用pg_basebackup備份;
cleandir.sh pg_basebackup -F p --progress -D $PGDATA -h 192.168.1.201 -p $PGPORT -U replica
加入定時(shí)任務(wù) crontab 中 例如:每天凌晨過(guò)5分執(zhí)行備份
5 0 * * * pg_backup.sh3.3 創(chuàng)建配置文件recovery.conf模板
執(zhí)行閃回查詢(xún)/數(shù)據(jù)庫(kù)恢復(fù)。多用時(shí)間點(diǎn)進(jìn)行恢復(fù)即(PITR)
restore_command = \'scp postgres@192.168.1.201:**/%f %p\' recovery_target_time = \'2018-11-10 10:33:12\'3.4 創(chuàng)建恢復(fù)腳本pg_flashback.sh
pg_flashback.sh 腳本用于數(shù)據(jù)庫(kù)誤操作實(shí)現(xiàn)閃回到某個(gè)時(shí)間點(diǎn)。支持多次閃回。執(zhí)行閃回 之前;需要配置 recovery.conf 中的 “recovery_target_time” 時(shí)間點(diǎn)。即恢復(fù)到哪個(gè)時(shí)間點(diǎn)。
第一次執(zhí)行;執(zhí)行
pg_flashback.sh 1
往后執(zhí)行閃回;通稱(chēng)再次執(zhí)行;執(zhí)行命令
pg_flashback.sh 2
當(dāng)然往后加也行例如:pg_flashback.sh 3
pg_flashback.sh腳本如下
##=========================================================== ## pg_flashback.sh ## created by lottu ## 2018/11/07 ## usage: pg_flashback.sh 1 ##============================================================ #!/bin/bash PGHOME=/opt/pgsql96 PGDATA=/data/postgres/data LANG=en_US.utf8 PGPORT=5432 PGUSER=postgres PGDATABASE=postgres PG_BACK_HOST_IP=192.168.1.202 E_BADARGS=65 E_FAIL=66 if [ $# -ne 1 ];then echo Usage: `basename $0` Please invoke this script with one command-line arguments exit $E_BADARGS fi flashback_path=/data/flash_back if [ $1 -eq 1 ];then echo Info: backup backupset backup.sh else rebackup.sh fi echo Info: edit recovery.conf #scp recovery.conf postgres@192.168.1.202:$PGDATA cp /home/postgres/recovery.conf $PGDATA echo Info: begin start database pg_ctl start -l /home/postgres/log/pg_server.log if [ $? -eq 0 ];then echo Info: start database succes sleep 10 psql -h $PG_BACK_HOST_IP -p 5432 postgres postgres -c select pg_xlog_replay_resume() else echo [Error]: start database fail exit $E_FAIL fi四. flashback 實(shí)驗(yàn)驗(yàn)證 4.1 驗(yàn)證目的 驗(yàn)證是否可以閃回/恢復(fù) 驗(yàn)證是否可以多次操作閃回 驗(yàn)證在閃回的過(guò)程中;正式環(huán)境是否正常對(duì)外服務(wù) 4.2 實(shí)驗(yàn)操作 4.2.1 備份數(shù)據(jù)庫(kù)
執(zhí)行pg_backup.sh腳本。部署成功了是沒(méi)這個(gè)操作。因?yàn)槊刻於加卸〞r(shí)備份。
[postgres@Postgres202 ~]$ pg_backup.sh waiting for server to shut down......... done server stopped 322503/322503 kB (100%), 4/4 tablespaces4.2.2 模擬誤操作
lottu=# create table lottu as select * from lottu01 ; SELECT 4 lottu=# select * from lottu; id | text ------+------- 1001 | lottu 1004 | rax 1002 | world 1003 | world (4 rows) -- 獲取時(shí)間點(diǎn);這個(gè)時(shí)間點(diǎn)“2018-11-10 14:56:56”是我目標(biāo)恢復(fù)時(shí)間點(diǎn)。表lottu有4條記錄。 lottu=# select now(); now ------------------------------ 2018-11-10 14:56:56.30188+08 (1 row) -- 在時(shí)間點(diǎn)“2018-11-10 14:57:51”;誤操作1 清理表lottu的記錄 lottu=# delete from lottu; DELETE 4 lottu=# select now(); now ------------------------------- 2018-11-10 14:57:51.891931+08 (1 row) -- 誤操作2 刪除表lottu。 lottu=# drop table lottu; DROP TABLE獲取時(shí)間點(diǎn);這個(gè)時(shí)間點(diǎn)“2018-11-10 14:56:56”是我目標(biāo)恢復(fù)時(shí)間點(diǎn)。表lottu有4條記錄。 在時(shí)間點(diǎn)“2018-11-10 14:57:51”;誤操作1 清理表lottu的記錄 誤操作2 刪除表lottu。 4.2.3 閃回操作
我們先在配置文件 recovery.conf 中的參數(shù)“recovery_target_time” 設(shè)置為 “2018-11-10 14:57:51”。執(zhí)行閃回pg_flashback.sh 1
[postgres@Postgres202 ~]$ pg_flashback.sh 1 Info: backup backupset Info: edit recovery.conf Info: begin start database server starting Info: start database succes psql: FATAL: the database system is starting up
閃回?cái)?shù)據(jù)庫(kù)成功啟動(dòng);登錄查看表lottu情況:表數(shù)據(jù)未找回;這不是我所需閃回的目標(biāo)
[postgres@Postgres202 ~]$ psql lottu lottu psql (9.6.0) Type help for help. lottu=# \\d lottu Table lottu.lottu Column | Type | Modifiers --------+---------+----------- id | integer | name | text | lottu=# select * from lottu; id | name ----+------ (0 rows)
在配置文件 recovery.conf 中的參數(shù)“recovery_target_time” 設(shè)置為 “2018-11-10 14:56:56”。再執(zhí)行閃回pg_flashback.sh 2
[postgres@Postgres202 ~]$ pg_flashback.sh 2 Info: edit recovery.conf Info: begin start database server starting Info: start database success psql: FATAL: the database system is starting up
再次閃回也成功了。我們?cè)诳聪卤韑ottu的情況
[postgres@Postgres202 ~]$ psql lottu lottu psql (9.6.0) Type help for help. lottu=# \\d lottu Table lottu.lottu Column | Type | Modifiers --------+---------+----------- id | integer | name | text | lottu=# select * from lottu; id | name ------+------- 1001 | lottu 1004 | rax 1002 | world 1003 | world (4 rows)
表 lottu 的數(shù)據(jù)成功找回。在使用 pg_dump 導(dǎo)出表 lottu 的表結(jié)構(gòu)和數(shù)據(jù)的腳本;
[postgres@Postgres202 ~]$ pg_dump -d lottu -t lottu.lottu -f lottu.sql [postgres@Postgres202 ~]$ scp lottu.sql postgres@192.168.1.201:/home/postgres
再到正式數(shù)據(jù)庫(kù)上執(zhí)行
[postgres@Postgres201 ~]$ psql lottu lottu psql (9.6.0) Type help for help. lottu=# \\i lottu.sql SET SET SET SET SET SET SET SET SET SET SET CREATE TABLE ALTER TABLE COPY 4 lottu=# \\d lottu Table lottu.lottu Column | Type | Modifiers --------+---------+----------- id | integer | name | text | lottu=# select * from lottu; id | name ------+------- 1001 | lottu 1004 | rax 1002 | world 1003 | world (4 rows)
在整個(gè)閃回過(guò)程;除了最后一步是在正式服務(wù)器上執(zhí)行。前面其他操作都是在閃回?cái)?shù)據(jù)庫(kù)操作。
4.3 實(shí)驗(yàn)結(jié)論 可以閃回 可以多次操作 不影響正式環(huán)境 五. 其他實(shí)現(xiàn)方式參考PostgreSQL flashback(閃回) 功能實(shí)現(xiàn)與介紹
六. 不足 不推薦使用這種方式恢復(fù)數(shù)據(jù)庫(kù)。多用于ddl/dml誤操作恢復(fù)。 七. 代碼下載鏈接:https://pan.baidu.com/s/1j8ZNj3yjxj82MnomzxQkfA
提取碼:j4xd
新聞標(biāo)題:告訴你如何打造PostgreSQL閃回環(huán)境
標(biāo)題來(lái)源:http://aaarwkj.com/article12/chsjgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、域名注冊(cè)、網(wǎng)站收錄、Google、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)