暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

磐维数据库物理备份与恢复

IT那活儿 2024-06-26
507

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!   


磐维数据库备份说明

数据备份是保护数据安全的重要手段之一,PanWeiDB数据库支持三种备份恢复类型:
  • 逻辑备份与恢复
  • 物理备份与恢复
  • 闪回恢复
1.1 逻辑备份与恢复
通过逻辑导出对数据进行备份,逻辑备份只能基于备份时刻进行数据转储,所以恢复时也只能恢复到备份时保存的数据。由于逻辑备份具有平台无关性,所以更为常见的是,逻辑备份被作为一个数据迁移及移动的主要手段。
1.2 物理备份与恢复
通过物理文件拷贝的方式对数据库进行备份,以磁盘块为基本单位将数据从主机复制到备机。
1.3 闪回恢复
利用回收站的闪回恢复删除的表。数据库的回收站功能类似于windows系统的回收站,将删除的表信息保存到回收站中。利用MVCC机制闪回恢复到指定时间点或者CSN点。

本文主要讲解磐维数据库使用gs_probackup进行物理备份与恢复。


打开相关配置参数

2.1 打开归档日志
使用omm用户登录主库确认归档是否开启。
postgres=# show archive_mode;
#如主库归档未开启,通过如下方式登录主库开启归档:
postgres=#alter system set archive_mode=on;
ALTER SYSTEM SET
postgres=#show archive_mode;
 archive_mode
--------------
 on
(1 row)

gs_guc修改:
gs_guc reload -N all -I all -c "archive_mode=on"
#设置归档路径:
postgres=#alter system set archive_dest = '/data/shsnc/panweidb/archive';
ALTER SYSTEM SET
postgres=#
postgres=#show archive_dest;
         archive_dest
------------------------------
 /data/shsnc/panweidb/archive
(1 row)

gs_guc修改:
#gs_guc reload -N all -I all -c "archive_dest = '/data/shsnc/panweidb/archive'"
gs_guc reload -N all -I all -c "archive_dest = '/data/shsnc/archive'"

2.2 检查wal_sender_timeout 参数
确认wal_sender_timeout该参数的值为10s:
postgres=# show wal_sender_timeout;
 wal_sender_timeout
--------------------
 6s

如设置的值不为10s,可通过一下方式调整该参数的值:
postgres=# alter system set wal_sender_timeout = '10s';
ALTER SYSTEM SET
postgres=# show wal_sender_timeout;
 wal_sender_timeout
--------------------
 10s
(1 row)
gs_guc修改:
gs_guc reload -N all -I all -c "wal_sender_timeout = '10s'"

gs_guc修改:
gs_guc reload -N all -I all -c "wal_sender_timeout = '10s'"
2.3 打开用户session超时设置
关闭omm用户的session超时参数,设置如下:
PanWeiDB=#alter user omm set session_timeout to 0;
ALTER ROLE

gs_guc修改:

gs_guc reload -N all -I all -c "session_timeout=0"


物理备份

3.1 初始化备份路径
[root@node1 dbops-installer]#mkdir /data/backup/
[root@node1 dbops-installer]#chown -R omm.dbgrp /data/backup/
gs_probackup init -B data/backup/probackup

说明:
在备份路径backup-path内初始化一个新的备份实例,并生成 pg_probackup.conf 配置文件,该文件保存了指定数据目录pgdata-path的gs_probackup设置。
# 创建备份日志目录:
mkdir data/backup/probackup/log
3.2 创建备份实例
gs_probackup add-instance -B backup-path -D pgdata-path --instance instance_name
或者
gs_probackup add-instance -B /data/backup/probackup --instance=pwdb-ajgl -D /data/shsnc/panweidb/data -p 17700 --
retention-redundancy=10

参数解释:
  • --instance
    创建备份服务时定义的备份服务实例名;
  • --backup-mode
    备份模式;
  • --pguser
    备份使用的数据库用户;
  • --pgdatabase
    备份使用的数据库名称(指定要连接的数据库名称);
  • --retention-redundancy
    指定在数据目录中留存的完整备份数。必须为正整数。0表示禁用此设置。
3.3 执行备份(创建指定实例的备份)
在进行增量备份之前,必须至少创建一次全量备份。
备份信息写入日志文件:
gs_probackup backup --backup-path=/data/backup/probackup --
instance=pwdb-ajgl --backup-mode=full --delete-expired --
pgdatabase=postgres > /data/backup/probackup/log/backup_week$(date +\%u).log

或者:
直接执行备份语句的方式:
gs_probackup backup --backup-path=/data/backup/probackup --
instance=pwdb-ajgl --backup-mode=full --delete-expired --pgdatabase=postgres

参数解释:
  • --delete-expired 
    根据设置的备份策略删除过期的备份集
3.4 查看备份
备份目录:
[omm@node1 probackup]$ ll /data/backup/probackup/backups/pwdb-ajgl/
-rw------- 1 omm dbgrp 190 Jan 18 19:06 pg_probackup.conf #配置文件
drwx------ 3 omm dbgrp 4.0K Jan 18 19:06 S7GEV5 #backup_id
drwx------ 3 omm dbgrp 4.0K Jan 18 19:31 S7GG08 #backup_id

显示位于备份目录中的pg_probackup.conf配置文件的内容。
可以通过指定--format=json选项,以json格式显示。默认情况下,显示为纯文本格式。
gs_probackup show-config -B /data/backup/probackup/ --instance=pwdb-ajgl --format=plain
查看备份:
gs_probackup show -B /data/backup/probackup/ --instance=pwdb-ajgl

==========================================================================================================================================
Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Type  Status
==========================================================================================================================================
pwdb-ajgl 9.2      S7GG08 2024-01-18 19:31:25+08  FULL  STREAM 1/0   11s 693MB 16MB 1.00  0/12000028  0/120001E8  FILE  OK
pwdb-ajgl 9.2      S7GEV5 2024-01-18 19:06:47+08  FULL  STREAM 1/0   14s 693MB 16MB 1.00  0/10000028  0/100001E8  FILE  OK


模拟数据丢失

模拟数据丢失,清除chg1数据库中t1和t2表内容:
登录数据库:
gsql -d postgres -p 5432
清除表数据:

postgres=# \c chg1;
chg1=# delete from t2;
DELETE 6


数据恢复

从指定实例的备份中恢复数据:
1)关闭数据库:
cm_ctl stop
2)备份数据库目录
mv /data/shsnc/panweidb/data /data/shsnc/panweidb/data-bak
3)执行恢复操作
其中-i 指定的备份 id 是 备份的 id。数据库将在-D 指定的数据目录处进行恢复。(该数据目录无需提前创建)
#gs_probackup restore -B backup-path --instance instance_name -D pgdata-path -i backup_id
gs_probackup restore -B /data/backup/probackup/ --instance pwdb-ajgl -D /data/shsnc/panweidb/data -i S7GG08

4)启动数据库
#pw_ctl start -D /data/shsnc/panweidb/data
gs_om -t start

5)查看集群
gs_om -t status --detail
6)使用 gsql 工具连接至数据库 panweidb
gsql  -d chg1 -p 17700 -r
7)查看表 t1 的内容
chg1=# select * from t2;
id
------
1001
1002
1003
1001
1002
1003
(6 rows)

chg1=#
两张表的数据恢复过来了。

END


本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论