PostgreSQL 大例項的備份方案之一

2021-09-24 00:25:30 字數 2494 閱讀 1737

基於流複製的ha, 取樣如下方案.

本文介紹一下, 在沒有其他主機的情況下, 如何實施塊級別的增量備份.

(假設主機為了效能, 未直接使用zfs作為檔案系統)

主要用到的是chroot, zfs. 當前, 現在btrfs 也支援snapshot, 所以隨便你的選擇了.

實現方法也比較多, 我們可以用容器, 例如docker, 也可用虛擬機器.

本文採用kvm虛擬機器, 在虛擬機器中使用zfs檔案系統, 在虛擬機器中建立以宿主機資料庫為primary的standby.

然後在zfs上做快照.

# iptables -l -v -n -t nat

chain prerouting (policy accept 22449 packets, 1310k bytes)

pkts bytes target prot opt in out source destination

chain postrouting (policy accept 25464 packets, 1325k bytes)

pkts bytes target prot opt in out source destination

116 6960 masquerade tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535

337 23214 masquerade udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535

0 0 masquerade all -- * * 192.168.122.0/24 !192.168.122.0/24

chain output (policy accept 25464 packets, 1325k bytes)

pkts bytes target prot opt in out source destination

這種通訊方式, 要直接掛載遠端的nfs是有問題的, 所以需要用其他方式來獲取遠端歸檔.

我這裡選擇的方法是scp, 將虛擬機器的postgres 使用者下的key拷貝到2臺宿主機, 使用scp來拷貝歸檔.

假設宿主機的物理ip分別為172.16.18.25,172.16.18.26.

restore_command = 'ping -c 1 -w 1 172.16.18.25 && scp [email protected]:/data04/pgdata/arch/*/%f %p; ping -c 1 -w 1 172.16.18.26 && scp [email protected]:/data04/pgdata/arch/*/%f %p'

primary_conninfo = 'host=192.168.122.1 port=1921 user=replica keepalives_idle=60'

好了, 有人要問, 為什麼不直接使用primary vip呢? 假設primary vip是172.16.18.27.

因為vip會漂移, 一旦漂移, 虛擬機器的~/.ssh/known_hosts裡面的條目就會失效, 需要重新編寫, 比較麻煩.

最後要配置宿主機

自動啟動虛擬機器

# cat /etc/rc.local

# kvm

/usr/bin/virsh start centos6_6_x64

配置虛擬機器自動啟動資料庫

# cat /etc/rc.local

su - postgres -c "pg_ctl start"

配置虛擬機器自動快照

# crontab -l

8 * * * * /usr/sbin/ntpdate asia.pool.ntp.org && /sbin/hwclock --systohc

1 4 * * * /root/script/zfs_snap.sh

# cat /root/script/zfs_snap.sh

#!/bin/bash

date="`date +%y%m%d`"

# 注意, 第乙個快照的位置是$pgdata所在的zfs

/sbin/zfs snapshot zp1/data02@$date

/sbin/zfs snapshot zp1/data01@$date

/sbin/zfs snapshot zp1/data03@$date

/sbin/zfs snapshot zp1/data04@$date

現在快照有了, 加上宿主機上的歸檔也在, 完全可以實現基於時間點的恢復 .

最後, 強烈建議pg_xlog不要放在zfs檔案系統中. 寧願放在虛擬機器的系統盤裡面也不要放在zfs裡面.

MySQL和PostgreSQL的遠端備份與恢復

mysql遠端備份 mysqldump h www.yunlauncher.com u root p push set gtid purged off v push.sql 輸入遠端伺服器的mysql的登陸密碼後,即開始備份了。mysql遠端恢復 mysql h localhost u root p...

Linux配置postgresql自動備份

1 pg dump資料庫備份命令 usr pgsql 9.3 bin pg dump f c o u dotop h 127.0.0.1 p 5432 f data erp data db backup geyt 20170214 09 37 55.sql geyt2.linux配置postgres...

postgresql 視窗函式排序例項

經常遇到一種應用場景,將部分行的內容進行彙總 比較 排序。比如資料表名稱test.test2 select num,province from test.test2 得到結果 1828 黑龍江 137 黑龍江 184 黑龍江 183 福建 125 福建 143 福建 119 海南 109 海南 13...