k8s中postgres基于PITR备份还原
admin
2023-02-28 03:02:13
0

参考网站:

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的namespace
kubens postgres                   #进入这个namespace,kubens工具的作用是切换namespace需要去gitghub搜索kubectx工具,二进制安装即可使用
kubectl apply -f postgres/*.yaml  #启动postgres数据库,所有动作在postgres这个namespace完成

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

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

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

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

postgres在k8s启动成功。

2、数据准备

进入postgres操作

kubens postgres    #进入postgres所在的namespace
kubectl 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+00
select pg_switch_wal();     #   0/A000158

删除测试用表

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

3、数据恢复演示

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

vim recovery.done
restore_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-0
kubectl get pods   

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

kubectl exec -it postgres-0 sh
psql
\c sso
\d
select * from test01;

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

 kubectl scale sts postgres --replicas=0  #先要关闭postgres才能删除pvc
lopes-MacBook-Pro:postgres-demo_wal2json lope$ kubectl get pvc
NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
backup-postgres-0   Bound    pvc-1be89954-98f9-4f9d-a15a-780d5432d38a   30Gi       RWO            nfs-client     122m
pgdata-postgres-0   Bound    pvc-6f25fd78-282c-4604-a2f6-e9a8c767e002   30Gi       RWO            nfs-client     71m
lopes-MacBook-Pro:postgres-demo_wal2json lope$ kubectl delete pvc pgdata-postgres-0                         #删除pgdata,backup不删除

相关内容

热门资讯

终于了解“一言棋牌.辅助开挂神... 终于了解“一言棋牌.辅助开挂神器?”确实真的有挂您好,一言棋牌这个游戏其实有挂的,确实是有挂的,需要...
终于懂了“,728土豪版.可以... 您好:,728土豪版这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这...
重磅消息“大庆划水麻将.到底有... 重磅消息“大庆划水麻将.到底有挂吗?”其实是有挂您好,大庆划水麻将这个游戏其实有挂的,确实是有挂的,...
终于了解“十胡卡.开挂器?”其... 网上科普关于“十胡卡有没有挂”话题很是火热,小编也是针对十胡卡作*弊开挂的方法以及开挂对应的知识点,...
【第一资讯】“桃花庄.怎么装挂... 有 亲,根据资深记者爆料桃花庄是可以开挂的,确实有挂(咨询软件无需打开直...
今日重大通报“火神牛牛.怎么开... 网上科普关于“火神牛牛有没有挂”话题很是火热,小编也是针对火神牛牛作*弊开挂的方法以及开挂对应的知识...
【第一消息】“约战丹东麻将.可... 网上科普关于“约战丹东麻将有没有挂”话题很是火热,小编也是针对约战丹东麻将作*弊开挂的方法以及开挂对...
玩家攻略科普“新绍兴麻将.究竟... 您好:新绍兴麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游...
俞敏洪发声再谈董宇辉离职:比较... 据看看新闻报道,12月21日,俞敏洪在讲话中谈及董宇辉离职,俞敏洪仍亲切地喊他“孩子”,表示对目前结...
美重建加沙计划被批“幻灯片项目... 【环球时报特约记者 梁由之】据《以色列时报》20日报道,美国政府正推出一项名为“日出计划”的投资设想...