成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么在postgresql中連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作-創(chuàng)新互聯(lián)

怎么在postgresql中連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

在七星關(guān)區(qū)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,七星關(guān)區(qū)網(wǎng)站建設(shè)費(fèi)用合理。

PostgreSQL默認(rèn)處于非歸檔模式。開啟歸檔模式,主要涉及到三個(gè)參數(shù):wal_level,archive_mode和archive_commandwal_level參數(shù)默認(rèn)為mininal,設(shè)置此參數(shù)為archive或者之上的級(jí)別都可以打開歸檔。當(dāng)postgresql需要傳輸歸檔日志時(shí),會(huì)調(diào)用archive_command指定的shell命令。

歸檔文件傳輸成功時(shí),shell命令要返回0,此時(shí),postgresql會(huì)認(rèn)為歸檔文件已經(jīng)傳輸成功,因此可以刪除或者重新循環(huán)利用歸檔文件。當(dāng)shell命令返回非0值時(shí),postgresql會(huì)保留所有未成功傳輸?shù)臍w檔日志,并不斷嘗試重新傳輸,直到成功。如果歸檔命令一直不成功,pg_xlog目錄會(huì)持續(xù)增長(zhǎng),有耗盡服務(wù)器存儲(chǔ)空間的可能,此時(shí)postgresql會(huì)PANIC關(guān)閉,直到釋放存儲(chǔ)空間。

另外將歸檔WAL日志存儲(chǔ)在本機(jī)上是風(fēng)險(xiǎn)極高,不被推薦的。postgresql通過archive_command提供了存儲(chǔ)WAL日志的靈活性,可以將歸檔日志存儲(chǔ)到掛裝的NFS目錄,磁帶,刻錄到光盤,也可以將WAL日志通過ssh/scp,rsync傳輸?shù)疆悪C(jī)保存。

**注意:**archive_command及restore_command命令將以運(yùn)行PostgreSQL的系統(tǒng)用戶的身份運(yùn)行。Centos系統(tǒng)里,這個(gè)系統(tǒng)用戶是postges。

環(huán)境說明

RoleIP系統(tǒng)數(shù)據(jù)庫(kù)
源庫(kù)10.10.10.60Centos6.5postgresql 9.2
備份庫(kù)10.10.10.61Centos6.5postgresql 9.2

需求說明:源庫(kù)產(chǎn)生歸檔日志,并傳輸?shù)絺浞輲?kù)上的歸檔目錄/data/pg_archive;備份庫(kù)利用歸檔日志,恢復(fù)至源庫(kù)的任意時(shí)間點(diǎn)的數(shù)據(jù)。

注意:基礎(chǔ)環(huán)境我們基于postgresql流復(fù)制,但是備份庫(kù)作為一個(gè)獨(dú)立的庫(kù),此時(shí)請(qǐng)保證recovery.conf中的standby_mode=off

環(huán)境配置

1.ssh無密碼登錄

由于我們備份和還原過程中所用的archive_command和restore_command命令都以postgres用戶運(yùn)行,因此我們需要針對(duì)postgres用戶實(shí)現(xiàn)ssh無密碼登錄。

#源庫(kù)
ssh-ketgen -t rsa
scp id_rsa.pub postgres@10.10.10.60:/var/lib/pgsql/.ssh/authorized_keys
#備份庫(kù)
ssh-ketgen -t rsa
scp id_rsa.pub postgres@10.10.10.61:/var/lib/pgsql/.ssh/authorized_keys

**注意:**yum安裝postgresql時(shí),默認(rèn)生成的postgres用戶的家目錄在/var/lib/pgsql

2.配置備份庫(kù)的歸檔目錄

#備份庫(kù)
mkdir -p /data/pg_archive
chmod postgres.postgres /data/pg_archive

說明:源庫(kù)產(chǎn)生的歸檔日志,要存到到異地備份庫(kù)的/data/pg_archive下。

3.修改源庫(kù)的postgresql.conf

在postgresql.conf中添加以下幾行

#開啟歸檔模式
archive_mode = on   
archive_command = 'ssh 10.10.10.60 test ! -f /data/pg_archive/%f && scp %p 10.10.10.60:/data/pg_archive/%f'

其中: %p表示wal日志文件的路徑,%f表示wal日志文件名稱。archive_command表示先驗(yàn)證備份庫(kù)的歸檔目錄下是否存在同名文件,以免發(fā)生覆蓋丟失數(shù)據(jù),若不存在將源庫(kù)上產(chǎn)生的歸檔日志保存到備份庫(kù)的/data/pg_archive目錄下。

注意:

(a)archive_timeout強(qiáng)制N秒以后進(jìn)行一次歸檔,若設(shè)置太小,很快就會(huì)超過wal_keep_segments = 16,導(dǎo)致數(shù)據(jù)覆蓋丟失,因此不要盲目設(shè)置。

(b)歸檔模式的開啟,只有在wal_level = hot_standby或archive

4.重載源庫(kù)并查看

pg_ctl reload -D /data/pgsql/data
postgres=# show archive_mode;
 archive_mode 
--------------
 on
(1 row)

模擬歸檔備份

1.查看源庫(kù)上的pg_xlog目錄

-bash-4.2$ ll pg_xlog
total 16388
-rw-------. 1 postgres postgres 16777216 Apr 21 13:42 000000010000000000000001
drwx------. 2 postgres postgres  4096 Apr 21 13:36 archive_status

此時(shí)archive_status目錄為存放歸檔日志的狀態(tài),若歸檔已經(jīng)產(chǎn)生,但沒有傳輸成功則為xxx.ready,并且一直會(huì)保留直至傳輸成功,然后狀態(tài)變?yōu)閤xx.done;此時(shí)目錄為空

2.在源庫(kù)上添加數(shù)據(jù)

此時(shí)由于數(shù)據(jù)庫(kù)為空,我們來創(chuàng)建testdb庫(kù),并添加數(shù)據(jù)

postgres=# create database testdb;
CREATE DATABASE
postgres=# create table t1(id int4,create_time timestamp(0) without time zone);
CREATE TABLE
postgres=# insert into t1 values(1,now());
INSERT 0 1
postgres=# insert into t1 values(2,now());
INSERT 0 1
postgres=# select * from t1;
 id |  create_time  
----+---------------------
 1 | 2016-04-21 13:49:34
 2 | 2016-04-21 13:49:48
(2 rows)

3.在源庫(kù)上手動(dòng)切換歸檔

postgres=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 0/1821010
(1 row)

正常情況下,wal日志段在達(dá)到16M后會(huì)自動(dòng)歸檔,由于測(cè)試我們使用手動(dòng)切換歸檔。

4.查看源庫(kù)pg_xlog目錄

-bash-4.2$ ll pg_xlog/
total 16388
-rw-------. 1 postgres postgres 16777216 Apr 21 13:42 000000010000000000000001
drwx------. 2 postgres postgres  4096 Apr 21 13:36 archive_status
-bash-4.2$ ls pg_xlog/
000000010000000000000001 000000010000000000000002 archive_status
-bash-4.2$ ls pg_xlog/archive_status/
000000010000000000000001.ready

此時(shí)歸檔日志的狀態(tài)為ready,說明此日志沒有傳輸成功,查看日志

vim /data/pgsql/pg_log/postgresql-Thu.log
ssh: connect to host 10.10.10.60 port 22: Connection timed out^M
FATAL: archive command failed with exit code 255
DETAIL: The failed archive command was: ssh 10.10.10.68 test ! -f /data/pg_archive/000000010000000000000001 && scp pg_xlog/000000010000000000000001 10.10.10.60:/data/pg_archive/000000010000000000000001
LOG: archiver process (PID 22284) exited with exit code 1

原來是由于ip地址錯(cuò)誤導(dǎo)致無法通過ssh傳輸,更改ip為10.10.10.61后,再次產(chǎn)生歸檔才能再次重新傳輸。

注意:觸發(fā)歸檔有三種方式:

1.手動(dòng)切換wal日志,select pg_switch_xlog()

2.wal日志寫滿后觸發(fā)歸檔,配置文件默認(rèn)達(dá)到16M后就會(huì)觸發(fā)歸檔,wal_keep_segments = 16

3.歸檔超時(shí)觸發(fā)歸檔,archive_timeout

在此我們使用的是手擋切換歸檔。

postgres=# insert into t1 values(3,now());
INSERT 0 1
postgres=# insert into t1 values(4,now());
INSERT 0 1
postgres=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 0/2000310
(1 row)
postgres=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 0/3000000
(1 row)
postgres=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 0/30000D8
(1 row)

再次查看pg_xlog目錄

-bash-4.2$ ll pg_xlog/archive_status/
total 0
-rw-------. 1 postgres postgres 0 Apr 21 13:51 000000010000000000000001.done
-rw-------. 1 postgres postgres 0 Apr 21 14:00 000000010000000000000002.done
-rw-------. 1 postgres postgres 0 Apr 21 14:04 000000010000000000000003.done

5.查看備份庫(kù)上的歸檔目錄

-bash-4.2$ ll /data/pg_archive/
total 49152
-rw-------. 1 postgres postgres 16777216 Apr 21 14:04 000000010000000000000001
-rw-------. 1 postgres postgres 16777216 Apr 21 14:04 000000010000000000000002
-rw-------. 1 postgres postgres 16777216 Apr 21 14:04 000000010000000000000003

至此,歸檔備份已經(jīng)完成,下面我們要介紹利用歸檔進(jìn)行恢復(fù)。

模擬從歸檔進(jìn)行PITR恢復(fù)

PITR恢復(fù)是基于文件系統(tǒng)備份和wal文件的備份,因此首先我們需要個(gè)基礎(chǔ)備份,然后在此基礎(chǔ)備份上對(duì)wal歸檔日志進(jìn)行回放。具體步驟如下:

1.使用pg_basebackup進(jìn)行基礎(chǔ)備份

pg_basebackup使用replication復(fù)制協(xié)議,因此需要在源庫(kù)上配置pg_hba.conf文件以允許replication,無論是本地還是通過網(wǎng)絡(luò)。

vim pg_hba.conf
#添加以下兩行,允許本地和網(wǎng)絡(luò)上的replication用于pg_basebackup
host replication  rep    127.0.0.1/32   md5
host replication  rep    10.10.10.61/8   md5
#重載
pg_ctl reload -D /data/pgsql/data

添加完畢后請(qǐng)重載pgsql

在備份庫(kù)上執(zhí)行pg_basebackup進(jìn)行遠(yuǎn)程的基礎(chǔ)備份

-bash-4.2$ pg_basebackup -D /data/pgsql/data -Fp -Xs -v -P -h 10.10.10.61 -p 5432 -U rep
Password: 
transaction log start point: 0/5000020
pg_basebackup: starting background WAL receiver
26664/26664 kB (100%), 1/1 tablespace         
transaction log end point: 0/50000E0
pg_basebackup: waiting for background process to finish streaming...
pg_basebackup: base backup completed

-D 表示接受基礎(chǔ)備份的目錄,我們將基礎(chǔ)備份放到/data/pgsql/data

-X 參數(shù),在備份完成之后,會(huì)到主庫(kù)上收集 pg_basebackup 執(zhí)行期間產(chǎn)生的 WAL 日志,在 9.2 版本之后支持 -Xs 即stream 形式,這種模式不需要收集主庫(kù)的 WAL 文件,而能以 stream 復(fù)制方式直接追趕主庫(kù)。

2.修改備庫(kù)上配置文件

由于所有的配置文件是從源庫(kù)上的備份過來的,因此我們需要修改:

vim postgresql.conf
屏蔽以下兩行
#archive_mode = on
#archive_command = 'ssh 192.168.3.139 test ! -f /data/pg_archive/%f && scp %p 192.168.3.139:/data/pg_archive/%f'

3.查看源庫(kù)上的時(shí)間確認(rèn)需要的恢復(fù)時(shí)間點(diǎn)

postgres=# select * from t1;
 id |  create_time  
----+---------------------
 1 | 2016-04-21 13:49:34
 2 | 2016-04-21 13:49:48
 3 | 2016-04-21 14:00:22
 4 | 2016-04-21 14:00:25
 5 | 2016-04-21 14:49:11
 6 | 2016-04-21 14:49:14
 7 | 2016-04-21 14:49:17
(4 rows)

由于此次基礎(chǔ)備份是在“ 4 | 2016-04-21 14:00:25”這條記錄后歸檔,而后面的5,6,7三條記錄是在基礎(chǔ)備份后生成的,因此若恢復(fù)5,6,7中的記錄需要在基礎(chǔ)備份上通過回放5,6,7的歸檔日志達(dá)到。

在此我們要將數(shù)據(jù)恢復(fù)到6這條記錄下,需要在recovery.conf中做如下設(shè)置:

cp /usr/share/pgsql/recovery.conf.sample /data/pgsql/data/recovery.conf
vim recovery.conf
restore_command = 'cp /data/pg_archive/%f %p'
recovery_target_time = '2016-04-21 14:49:14'

**注意:**recovery.conf中standby_mode要為off,否則備份庫(kù)將會(huì)以備庫(kù)身份啟動(dòng),而不是即時(shí)恢復(fù)。

4.啟動(dòng)備份庫(kù)

備份庫(kù)啟動(dòng)過程中,會(huì)進(jìn)行PITR恢復(fù)到指定的時(shí)間點(diǎn)

pg_ctl start -D /data/pgsql/data
#查看日志
vim /data/pgsql/pg_log/postgresql-Thu.log 
LOG: database system was interrupted; last known up at 2016-04-21 14:34:29 CST
LOG: starting point-in-time recovery to 2016-04-21 14:49:14+08
LOG: restored log file "000000010000000000000005" from archive
LOG: redo starts at 0/5000020
LOG: consistent recovery state reached at 0/50000E0
LOG: restored log file "000000010000000000000006" from archive
LOG: recovery stopping before commit of transaction 1898, time 2016-04-21 14:49:16.635744+08
LOG: redo done at 0/6000398
LOG: last completed transaction was at log time 2016-04-21 14:49:13.786388+08
cp: cannot stat ‘/data/pg_archive/00000002.history': No such file or directory
LOG: selected new timeline ID: 2
cp: cannot stat ‘/data/pg_archive/00000001.history': No such file or directory
LOG: archive recovery complete
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
#查看數(shù)據(jù)
postgres=# select * from t1;
 id |  create_time  
----+---------------------
 1 | 2016-04-21 13:49:34
 2 | 2016-04-21 13:49:48
 3 | 2016-04-21 14:00:22
 4 | 2016-04-21 14:00:25
 5 | 2016-04-21 14:49:11
 6 | 2016-04-21 14:49:14
(6 rows)

7.查看備份庫(kù)pg_xlog

-bash-4.2$ ll pg_xlog
total 49160
-rw-------. 1 postgres postgres 16777216 Apr 21 15:00 000000010000000000000005
-rw-------. 1 postgres postgres 16777216 Apr 21 15:00 000000010000000000000006
-rw-------. 1 postgres postgres 16777216 Apr 21 15:00 000000020000000000000006
-rw-------. 1 postgres postgres  64 Apr 21 15:00 00000002.history
drwx------. 2 postgres postgres  4096 Apr 21 15:00 archive_status
-bash-4.2$ cat pg_xlog/00000002.history 
1 000000010000000000000006 before 2016-04-21 14:49:16.635744+08

從pg_xlog我們看到設(shè)置好recovery.conf文件后,啟動(dòng)數(shù)據(jù)庫(kù),將會(huì)產(chǎn)生新的timeline,id=2,而且會(huì)生成一個(gè)新的history文件00000002.history,里面記錄的是新時(shí)間線2從什么時(shí)間哪個(gè)時(shí)間線什么原因分出來的,該文件可能含有多行記錄。

另外,恢復(fù)的默認(rèn)行為是沿著與當(dāng)前基本備份相同的時(shí)間線恢復(fù)。如果你想恢復(fù)到某些時(shí)間線,你需要指定的recovery.conf目標(biāo)時(shí)間線recovery_target_timeline,不能恢復(fù)到早于基本備份分支的時(shí)間點(diǎn)。

注意:如果恢復(fù)過一次,并重新設(shè)置recovery_target_time,重新啟動(dòng)觸發(fā)恢復(fù),并不會(huì)基于時(shí)間線1進(jìn)行恢復(fù),而是基于時(shí)間線2進(jìn)行恢復(fù)的,但是此時(shí)間線上在/data/pg_archive/并沒有時(shí)間線為2的歸檔日志,因此會(huì)報(bào)錯(cuò)。

補(bǔ)充postgres修改歸檔模式

步驟一:

修改postgresql的配置文件(postgresql.conf)

wal_level=hot_standby
      archive_mode =on 
      archive_command ='DATE=`date +%Y%m%d`;DIR="/home/postgres/arch/$DATE";(test -d $DIR || mkdir -p $DIR)&& cp %p $DIR/%f'

ps:%p 是指相對(duì)路徑 %f是指文件名

步驟二:創(chuàng)建歸檔路徑

mkdir -p /home/postgres/arch     
chown -R postgres:postgres /home/postgres/arch

步驟三:重啟數(shù)據(jù)庫(kù)

步驟四:驗(yàn)證歸檔是否正常

postgres=# checkpoint;
               CHECKPOINT
      postgres=# select pg_switch_xlog();
       pg_switch_xlog 
       ----------------
       1/760000E8
       (1 row)
     postgres@ubuntu:~$ cd /home/postgres/data/data_1999/arch/
     postgres@ubuntu:~/data/data_1999/arch$ ls
      20150603
     postgres@ubuntu:~/data/data_1999/arch$ cd 20150603/
      postgres@ubuntu:~/data/data_1999/arch/20150603$ ls
      000000010000000100000074 000000010000000100000075 000000010000000100000076

關(guān)于怎么在postgresql中連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

新聞標(biāo)題:怎么在postgresql中連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://jinyejixie.com/article16/dhocdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)網(wǎng)站建設(shè)、網(wǎng)站策劃、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
金阳县| 惠安县| 保德县| 开鲁县| 梁河县| 庆城县| 乐山市| 财经| 柞水县| 屯门区| 凉城县| 三都| 泸水县| 湖口县| 威宁| 永城市| 喀什市| 兴文县| 正定县| 岳池县| 澜沧| 凤阳县| 平南县| 永安市| 军事| 杭州市| 安乡县| 永福县| 二连浩特市| 民乐县| 奈曼旗| 浑源县| 偏关县| 湾仔区| 体育| 寻甸| 渭南市| 隆回县| 库伦旗| 连南| 灵川县|