要让 pg_rman 支持异地备份,可以通过以下方式实现:
方法 1:使用 NFS 挂载远程存储
1、在目标服务器上配置 NFS 服务:
确保远程存储服务器上安装并启用了 NFS 服务。
配置共享目录,例如 /backup。
在 /etc/exports 中添加导出配置,例如:
/backup 192.168.1.0/24(rw,sync,no_root_squash)
重启 NFS 服务:
sudo systemctl restart nfs-server
2、在 PostgreSQL 服务器上挂载 NFS:
在 PostgreSQL 服务器上安装 NFS 客户端:
sudo apt install nfs-common # 对于 Debian/Ubuntu
sudo yum install nfs-utils # 对于 CentOS/Red Hat
创建挂载点并挂载远程目录:
sudo mkdir -p /mnt/backup
sudo mount -t nfs 192.168.1.100:/backup /mnt/backup
在 /etc/fstab 中配置自动挂载:
192.168.1.100:/backup /mnt/backup nfs defaults 0 0
3、配置 pg_rman:
将备份路径设置为 NFS 挂载点:
1pg_rman init -B /mnt/backup
方法 2:通过 SSHFS 远程挂载
1、安装 SSHFS:
在 PostgreSQL 服务器上安装 SSHFS:
sudo apt install sshfs # 对于 Debian/Ubuntu
sudo yum install fuse-sshfs # 对于 CentOS/Red Hat
2、挂载远程存储:
创建挂载点并挂载远程目录:
sudo mkdir -p /mnt/backup
sshfs -o allow_other -p 922 root@192.16.7.162:/minio/data/pgbk/pg16 /bk
如果需要在启动时自动挂载,可以使用 sshfs 配合 fstab 或 autofs。
3、配置 pg_rman:
将备份路径设置为 SSHFS 挂载点:
mkdir /bk
chmod 777 /bk/
pg_rman init -B /bk
more /bk/pg_rman.ini
-- 全量
pg_rman backup --backup-mode=full -B /bk
pg_rman show -B /bk
pg_rman show '2024-07-08 15:24:04' -B /bk/
pg_rman validate -B /bk
-- 增量
pg_rman backup --backup-mode=incremental -B /bk
pg_ctl stop
rm -rf /pg16/pgdata/
-- 还原到最新状态
pg_rman restore -B /bk
-- 增量还原
pg_rman restore -B /bk --recovery-target-time="2024-07-08 15:18:10"
pg_ctl start
create table t(id int, col2 text);
insert into t select n, 'test123' || n || md5(random()::varchar) from generate_series(1, 6000000) as n;
方法 3:使用对象存储,将S3挂载为本地盘(使用 s3fs-fuse或 rclone)
如果希望直接使用对象存储(如 Amazon S3 或 MinIO),需要通过工具实现对对象存储的挂载或同步:
1、使用 s3fs-fuse 挂载对象存储:
sudo yum install s3fs-fuse -y
echo "12345678:12345678" > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
mkdir -p /s3fs_dbbk
s3fs dbbk /s3fs_dbbk -o passwd_file=~/.passwd-s3fs -o url=http://192.16.7.162:9001 -o use_path_request_style -o allow_other
fusermount -uz /s3fs_dbbk
pkill -9 s3fs
2、使用 rclone 挂载对象存储:
rclone 是一个强大的命令行工具,支持多种云存储服务,包括 S3。可以用它将 S3 存储桶挂载为本地文件系统。
wget https://downloads.rclone.org/v1.68.1/rclone-v1.68.1-linux-amd64.zip
unzip rclone-v1.68.1-linux-amd64.zip -d /usr/local/
ln -s /usr/local/rclone-v1.68.1-linux-amd64 /usr/local/rclone
ln -s /usr/local/rclone/rclone /usr/local/bin
# /usr/local/rclone/rclone config
cat > ~/.config/rclone/rclone.conf <<"EOF"
[mys3]
type = s3
provider = Minio
access_key_id = minioadmin
secret_access_key = minioadmin
region = us-east-1
endpoint = http://192.16.7.162:9001
acl = private
EOF
rclone lsd mys3: -vv
mkdir ~/s3bucket
ln -s /usr/bin/fusermount /usr/bin/fusermount3
/usr/local/rclone/rclone mount mys3:pgbk ~/s3bucket --allow-other &
rclone config show
pkill -9 rclone
umount ~/s3bucket
方法 4:使用脚本直接传输备份文件
1、备份完成后推送文件:
使用 pg_rman 在本地执行备份:
pg_rman backup
使用 rsync 或 scp 将备份文件传输到远程:
rsync -av /path/to/local/backup user@192.168.1.100:/backup
2、自动化脚本:
编写脚本完成备份和传输:
#!/bin/bash
pg_rman backup
rsync -av /path/to/local/backup user@192.168.1.100:/backup
方法选择建议
如果需要实时备份到远程,推荐使用 NFS 或 SSHFS。
如果需要与云存储集成,推荐使用 rclone 或 s3fs-fuse。
如果备份文件较大且传输速度是关键,推荐使用 rsync 进行增量传输。
通过这些方法,可以让 pg_rman 支持异地备份,同时满足高效和安全的需求。
总结
1、pg_rman只从postgresql.conf取log_directory和archive_command参数的值。所以,需要配置该文件,而不能使用postgresql.auto.conf文件。
2、每次备份完(无论是全备还是增备),都必须要做一次校验,否则备份集不可用来恢复,增量备份时也会报错。没有验证的话,pg_rman show也能看到这个没有验证的备份,但是状态显示DONE而非OK
3、pg_rman必须和数据库服务器安装在一块
4、pg_rman软件的版本需要和数据库的版本匹配,安装完成后,可执行文件pg_rman和PostgreSQL的bin目录在一块。
5、可以利用sshfs、nfs、samba等共享文件系统进行类似的异地备份。
标签:rclone,备份,异地,pg,挂载,rman,backup From: https://www.cnblogs.com/o-O-oO/p/18568774原创 AiDBA