点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!

pg_basebackup是postgresql提供的一个基础备份的工具,这个工具会把整个数据库实例的数据都拷贝出来,而不只是把实例中的部分(如某个数据库或表)单独备份出来,该工具使用replication协议连接到数据库实例上,所以主数据库中的pg_hba.conf必须允许replication连接。
--相关使用参数可通过help获得:
pg_basebackup --help

---创建备份路径:
mkdir -p /pgdata/pg_backup
---执行备份:
pg_basebackup -D pgdata/pg_backup -Ft -Pv -Upostgres -h 192.168.168.123 -p 1921
---备份命令参数:
-D 指定备份目录,目录需提前创建
-F 压缩方式
-Pv 显示备份过程
-U 指定用户
-h ip地址
-p 端口号

在执行备份命令的过程中产生了报错,图中的报错内容可知,该ip 192.168.168.123缺少部分连接权限,具体跟replication connection有关。正如前面的定义所说,要使用pg_basebackup必须有replication连接权限。

---查看配置文件:
cd $PGDATA
vim pg_hba.conf

通过检查pg_hba.conf文件发现确实没有配置相关的replication连接权限。因为是实验环境,所以直接放开ip地址限制。

在pg_hba.conf文件中,添加完replication连接权限后保存退出。又因为pg_hba.conf要想生效需要重启。所以这里重启pgsql。
---重启pgsql:
pg_ctl restart

---重新执行备份:
pg_basebackup -D pgdata/pg_backup -Ft -Pv -Upostgres -h 192.168.168.123 -p 1921


此时,备份完成,目标备份目录下有备份文件产生。
---关闭pgsql:
pg_ctl stop -mi
---删除pgsql目录下的所有数据:
rm -rf /pgdata/12/data/*

---解压备份文件到目录数据目录:
tar -xf base.tar -C /pgdata/12/data/
tar -xf pg_wal.tar -C /pgdata/pg_arch/


解压完成后,已经恢复了所有已删除的数据文件,但是此时若直接执行pg_ctl start将会返回报错,pgsql无法启动。这是因为缺少了修改恢复配置文件。
---修改配置文件:
vim postgresql.auto.conf
restore_command = 'cp pgdata/pg_arch/%f %p'
recovery_target = 'immediate'
---进入恢复模式:
touch /pgdata/12/data/recovery.signal
pg_ctl start

至此,pgsql的初步备份恢复以完成。
END
本文作者:胡晓明
本文来源:IT那活儿(上海新炬王翦团队)





