千家信息网

k8s中postgres基于PITR备份还原

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,参考网站:postgres官网备份PITR文档Postgresql 连续归档和时间点恢复(PITR)1、在k8s创建postgres数据库[用于创建postgres的yaml文件下载()需要修改70-
千家信息网最后更新 2024年11月27日k8s中postgres基于PITR备份还原

参考网站:

postgres官网备份PITR文档

Postgresql 连续归档和时间点恢复(PITR)

1、在k8s创建postgres数据库

[用于创建postgres的yaml文件下载()

需要修改70-statefulsets-postgres.yaml文件中的数据持久化方式,即

storageClassName: 'nfs-client'  #这里的nfs-client修改为自己k8s的持久化设备,这里使用的是已经搭建好的nfs服务

启动postgres数据库:

wget xxxxxxx.xxxxxx               #下载postgres数据库启动需要的yaml文件kubectl create namespace postgres #创建一个名叫postgres的namespacekubens postgres                   #进入这个namespace,kubens工具的作用是切换namespace需要去gitghub搜索kubectx工具,二进制安装即可使用kubectl apply -f postgres/*.yaml  #启动postgres数据库,所有动作在postgres这个namespace完成

在postgres文件的配置文件中要打开的内容:

vim postgresql.confwal_level='hot_standby'    #wal_level至少设置为replicaarchive_mode='on'archive_command='test ! -f /backup/archivedir/%f && cp %p /backup/archivedir/%f'

查看postgres数据库是否启动完成:

lopes-MacBook-Pro:postgres-demo_wal2json lope$ kubectl get podsNAME         READY   STATUS    RESTARTS   AGEpostgres-0   1/1     Running   0          38m

postgres在k8s启动成功。

2、数据准备

进入postgres操作

kubens postgres    #进入postgres所在的namespacekubectl exec -it postgres-0 sh   #进入postgres命令

备份基础数据库文件

pg_basebackup   -D /backup/backup  -h postgres-0   -Fp  -R   -Pv  -l postgrebackup-20191112  #此文件为恢复的基础文件

创建postgres日志备份目录

mkdir /backup/archivedir   #以后postgres的日志会自动导入这个目录,也是PITR的关键

创建测试用表

psql   #进入postgres数据库\c sso #选择sso数据库\d     #查看该数据库下没有表create table test01(id int primary key,name varchar(20));insert into test01 values(1,'a'),(2,'b'),(3,'c');select current_timestamp;   #  2019-11-12 06:04:50.71881+00select pg_switch_wal();     #   0/A000158

删除测试用表

delete from test01;select current_timestamp;   #   2019-11-12 06:07:36.529161+00select pg_switch_wal();     #    0/C000000

3、数据恢复演示

修改/backup/backup/recovery.done文件(若是recovery.conf,则该为recovery.done)

vim recovery.donerestore_command='cp /backup/archivedir/%f %p'recovery_target_time='2019-11-12 06:04:50.71881+00'  # 这里的时间修改为想要恢复的时间点recovery_target_timeline='latest'

基础数据文件恢复

mv /pgdata/postgres-0 /pgdata/postgres-0_bak        #破坏原数据文件cp -r /backup/backup /pgdata/postgres-0             #将备份文件拷贝为数据库文件cd postgres-0

rm -rf pg_wal/0 && rm -rf pg_wal/archive_status/ #删除老日志文件,以便PITR通过日志恢复

重启postgres,使之自动进入恢复模式

kubectl delete pods postgres-0kubectl get pods   

重启成功后,即可进入数据库检查是否已经恢复到预定的数据。

kubectl exec -it postgres-0 shpsql\c sso\dselect * from test01;

如果出现操作失误,导致不能进入postgres的pod,可以将该pod的pvc删除后,重启pod即可重新操作。

 kubectl scale sts postgres --replicas=0  #先要关闭postgres才能删除pvclopes-MacBook-Pro:postgres-demo_wal2json lope$ kubectl get pvcNAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGEbackup-postgres-0   Bound    pvc-1be89954-98f9-4f9d-a15a-780d5432d38a   30Gi       RWO            nfs-client     122mpgdata-postgres-0   Bound    pvc-6f25fd78-282c-4604-a2f6-e9a8c767e002   30Gi       RWO            nfs-client     71mlopes-MacBook-Pro:postgres-demo_wal2json lope$ kubectl delete pvc pgdata-postgres-0                         #删除pgdata,backup不删除
数据 文件 数据库 备份 日志 基础 时间 成功 工具 目录 测试 为数 二进制 作用 关键 内容 动作 命令 库文件 所在 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全防范技术以及其原理 nvidia显卡连接服务器 dbms是什么数据库系统 医药流通企业软件开发定制 销售服务器怎么备案 dbf中如何追加数据库 网络技术专升本可以选哪些专业 湖北软件开发服务以客为尊 有小米手机的云服务器吗 秒账如何导入数据库 对网络安全未来的看法 网络安全八个字主题 数据库表设置自动增长 顺义区品牌软件开发要求 游戏设计和软件开发 新乡软件开发优缺点 linux 服务器连接数 合肥网络安全大赛试题及答案 pptv多屏互动服务器 广州软件开发设计培训机构 计算机软件开发部分代码 互联网金融科技公司是什么 河源数字软件开发批发价格 焦点网络安全科技有限公司 大学如何自学计算机网络安全技术 福建电信网络服务器虚拟主机 顶级网络安全技术人员求职 软件开发 找业务 2022燃烧的远征pvp服务器 u8 10.1初始化数据库
0