MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2016年7月14日 星期四

EDB Backup and Recovery Tool 操作筆記


對 PostgreSQL 進行 Point-in-Time Recovery 備份,若是很多的資料庫要處理,這就會變成一個令人頭昏的大工程。EnterpriseDB 公司的 Backup and Recovery Tool v1.1(EDB-BaRT)是該公司提供來進行資料庫整合管理備份的工具。它主要的功能是用在管理資料庫的全備份(Base Backup),可以有效管理同一個資料庫的多分全備份,並能夠在一處管理多部 PostgreSQL/EnterpriseDB 的資料庫全備份檔案。


該工具為命令列下的工具,可以利用 CRON Job,搭配 BaRT 的 log(會將每次的備份、還原活動紀錄起來),定時進行資料庫全備份,並依照備份時間點,選取適當的備份檔進行還原。


目前 EDB-BaRT v1.1 還不支援管理 Incremental Backup 的功能(也就是,Point-in-Time Recovery),但還是能透過手動加上適當的 recovery.conf 檔案到待還原的全備份中,進行 Point-in-Time Recovery。


系統需求
這個工具支援的是 64 位元版的 RHEL 6.x/7.x,該機器上不見得要安裝 PostgreSQL 資料庫。
而該主機上將會作為資料庫全備份檔案,以及 WAL 交易日誌存放的地方,於是若有多部資料庫要管理,該主機上的儲存空間要準備充足。



安裝 BaRT
BaRT 依賴標準路徑下的 libpq.so,若是安裝 EDB 公司發布的 PostgreSQL distribution,則可以直接由 PostgreSQL 社群維護的 YUM Repository 取得 postgresql9x-libs 的 rpm 安裝檔安裝
[root@bartvm ~]# yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/postgresql95-libs-9.5.3-2PGDG.rhel6.x86_64.rpm

[root@bartvm ~]# rpm -ivh edb-bart-1.1.0-1.rhel6.x86_64.rpm


設置 SSH 金鑰
為了讓 BaRT 工具能夠管理各個資料庫的 WAL 交易日誌的存放,需要讓各部資料庫主機與 BaRT 主機之間能夠透過 SSH 免帳號登入,以便使 WAL 檔案可以透過 scp 傳送


以下示範為從 computerA 主機上的帳號 user1 免密碼登入 computerB 主機的帳號 user2
[user1@computerA ~]$ ssh-keygen -t rsa

[user1@computerA ~]$ ssh-cpoy-id -i ~/.ssh/id_rsa.pub user2@computerB

如此便能夠進行登入測試
[user1@computerA ~]$ ssh user2@computerB

若仍無法自動登入,請檢查 .ssh/authorized_keys 的檔案權限

各資料庫的設置
為了讓各資料庫能產生 WAL 交易日誌備份,以及使用 BaRT 的備份功能,需要設置 postgresql.conf 以及 pg_hba.conf


在 postgresql.conf 中啟用 WAL 交易日誌的備份功能:
listen_addresses = '*'
port = 5444
wal_level = archive
archive_mode = on
max_wal_senders = 1

在 pg_hba.conf 中允許相對應的登入權限
host     all            enterprisedb    127.0.0.1/32    trust
host     replication    enterprisedb    127.0.0.1/32    trust

設置完畢後,重新啟動資料庫


接著,便可以進行 BaRT 的設定。BaRT 的設定檔位置預設在 /usr/edb-bart-1.1/etc/bart.cfg(為 root 所擁有),不過也可自行指定設定檔位置,並透過指令參數指定。
以下範例將 /usr/edb-bart-1.1/etc/bart.cfg 內主要部份取出來,另存到 user 帳號的 ~/bart.cfg 下
[user@bartvm ~]$ cat ~/bart.cfg
[BART]
bart-host= enterprisedb@127.0.0.1
backup_path = /opt/backup
pg_basebackup_path = /opt/PostgresPlus/9.5AS/bin/pg_basebackup
wal_compression= enabled
logfile = /tmp/bart.log

[PPAS95]
host = 127.0.0.1
port = 5444
user = enterprisedb
archive_command = "cp %p %a/%f"
description = "PPAS 95 server"

上述對於 PostgreSQL 9.4 版以後,可以透過 BaRT 統一管理 archive_command 指令;在 BaRT 中所設定的 archive_command 指令會在 BaRT 初始化後送到資料庫中的 postgresql.auto.conf 內,待重新啟動資料庫之後便生效


設定完畢後,便可以直接執行 BaRT 工具。


初始化:這步驟主要將 archive_command 送到資料庫的 postgresql.auto.conf 中
[user@bartvm ~]$ /usr/edb-bart-1.1/bin/bart -f ~/bart.cfg \
> INIT -s ppas95
INFO:  setting archive_command for server 'ppas95'
WARNING: archive_command is set. server restart is required

執行後別忘了需要重新啟動資料庫


接著,列出資料庫信息
[user@bartvm ~]$ /usr/edb-bart-1.1/bin/bart -f \
> ~/bart.cfg SHOW-SERVERS -s all
SERVER NAME         : ppas95
HOST NAME           : 127.0.0.1
USER NAME           : enterprisedb
PORT                : 5444
REMOTE HOST         :
RETENTION POLICY    : none
DISK UTILIZATION    : 0.00 bytes
NUMBER OF ARCHIVES  : 0
ARCHIVE PATH        : /opt/backup/ppas95/archived_wals
ARCHIVE COMMAND     : cp %p /opt/backup/ppas95/archived_wals/%f
XLOG METHOD         : fetch
WAL COMPRESSION     : enabled
TABLESPACE PATH(s)  :
DESCRIPTION         : "PPAS 95 server"

若是資料庫登入上有發生問題,該表單便不會列舉完整。因此可以用這個指令確認是否設置正確


接著便能夠進行備份
[user@bartvm ~]$ /usr/edb-bart-1.1/bin/bart -f ~/bart.cfg BACKUP -s ppas95
INFO:  creating backup for server 'ppas95'
INFO:  backup identifier: '1465975415236'
576274/576274 kB (100%), 1/1 tablespace
INFO:  backup completed successfully
INFO:  backup checksum: b28d97be7db71f1e034a15eb08d2c72f of base.tar
INFO:  
BACKUP DETAILS:
BACKUP STATUS: active
BACKUP IDENTIFIER: 1465975415236
BACKUP NAME: none
BACKUP LOCATION: /opt/backup/ppas95/1465975415236
BACKUP SIZE: 562.77 MB
BACKUP FORMAT: tar
XLOG METHOD: fetch
BACKUP CHECKSUM(s): 1
ChkSum                             File    
b28d97be7db71f1e034a15eb08d2c72f   base.tar  
TABLESPACE(s): 0
START WAL LOCATION: 000000010000000000000026
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2016-06-15 07:23:35 UTC
STOP TIME: 2016-06-15 07:23:46 UTC
TOTAL DURATION: 11 sec(s)

備份完畢後,可以用下列指令檢視備份
[user@bartvm ~]$ /usr/edb-bart-1.1/bin/bart -f ~/bart.cfg SHOW-BACKUPS -s ppas95
SERVER NAME   BACKUP ID       BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS
                                                                                                      
ppas95        1465984889630   2016-06-15 10:01:40 UTC   78.15 MB      560.00 MB     35          active

以上操作,基本上就完成備份操作了


指定在 ~/restore1/ 下建立還原資料庫
[user@bartvm ~]$ mkdir ~/restore1
[user@bartvm ~]$ chmod 700 ~/restore1/
[user@bartvm ~]$ cd /usr/edb-bart-1.1/bin
[user@bartvm /bin]$ ./bart -f ~/bart.cfg \
> RESTORE -s ppas95 -i 1465984889630 -p ~/restore1/
INFO:  restoring backup '1465984889630' of server 'ppas95'
INFO:  restoring backup to /var/lib/ppas//restore1
INFO:  base backup restored
INFO:  copying WAL file(s) to /var/lib/ppas//restore1/archived_wals
INFO:  archiving is disabled

啟用這個資料庫
[user@bartvm ~]$ pg_ctl -D ~/restore_dir/ start

到這裡,便還原備份到該一備份檔建立的時間點了


到目前為止,EDB BaRT v1.1 工具由於還只有支援全備份的管理,所以若是要進一步使用 Point-in-Time Recovery,就得要再手動加上 recovery.conf 檔案才行。


要進行 Point-in-Time Recovery,首先,如上面一樣,先恢復一份備份:
[user@bartvm ~]$ mkdir ~/restore2
[user@bartvm ~]$ chmod 700 ~/restore2/
[user@bartvm ~]$ cd /usr/edb-bart-1.1/bin
[user@bartvm /bin]$ ./bart -f ~/bart.cfg \
> RESTORE -s ppas95 -i 1465984889630 -p ~/restore2/
INFO:  restoring backup '1465984889630' of server 'ppas95'
INFO:  restoring backup to /var/lib/ppas//restore2
INFO:  base backup restored
INFO:  copying WAL file(s) to /var/lib/ppas//restore2/archived_wals
INFO:  archiving is disabled

再來,設定 recovery.conf
[user@bartvm ~]$ cat ~/restore2/recovery.conf
restore_command = 'cp /opt/backup/ppas95/archived_wals/%f %p'

最後,從舊(/損毀的)的資料夾複製 WALs 到新備份裡面
[user@bartvm backup]$ rm -rf ~/restore2/pg_xlog/*
[user@bartvm backup]$ cp -r ~/9.5AS/data/pg_xlog/* ~/restore2/pg_xlog/

這樣一來,就能啟動資料庫,開始 Point-in-Time Recovery 了
[user@bartvm ~]$ pg_ctl -D ~/restore2 start

想確認還原的狀況,一樣去觀察 PostgreSQL 的 log:
[user@bartvm ~]$ tail -f ~/restore1/pg_log/enterprisedb-2016-06-16_032631.log

要確認還原完畢,去檢查 recovery.conf 有沒有變成 recovery.done 就行了(就是 Point-in-Time Recovery 的流程)。


參考:

相關工具
pg_rman:這個工具與 EDB BaRT 設計蠻相像的,目前有支援 Incremental Backup 功能(目前 EDB BaRT v1.1 尚未支援),不過該工具無法像 BaRT 可以跨版本支援
WAL-E:著重在強化支援雲端 PostgreSQL 服務
PgBackMan:有進入 PostgreSQL 社群 YUM 的工具
Barman:有進入 PostgreSQL 社群 YUM 的工具

其他
omnipitr:一個管理 WAL 怪怪的工具

沒有留言:

張貼留言