需求
今天运维同事提了个需求,需要对刚上线的生产系统执行数据库自动备份任务。具体需求是,每3天执行一次数据库全量备份,其他时间执行数据库增量备份。接下来我们就在测试环境部署一下物理备份(包括全量备份和增量备份)的定时任务和脚本,希望对大家有所帮助!
环境说明
环境信息:
主机名 | ip地址 | OS版本 | 内存、CPU | 节点角色 | 数据库端口 | 数据目录 |
---|---|---|---|---|---|---|
node1 | 192.*.*.60 | Centos7.9 | 4G 、 1个双核 | 主节点 | 17700 | /data/panweidb/data |
node2 | 192.*.*.62 | Centos7.9 | 4G 、 1个双核 | 从节点 | 17700 | /data/panweidb/data |
node3 | 192.*.*.64 | Centos7.9 | 4G 、 1个双核 | 从节点 | 17700 | /data/panweidb/data |
登录数据库检查参数(主节点)
#检查是否开启归档
panweidb=# show archive_mode;
archive_mode
--------------
on
(1 row)
#检查归档目的地,可以根据系统实际情况更改
panweidb=# show archive_dest;
archive_dest
--------------
/archive
(1 row)
#检查wal_sender_timeout
panweidb=# show wal_sender_timeout ;
wal_sender_timeout
--------------------
10s
(1 row)
#要使用增量备份,需设置参数enable_cbm_tracking = on
#注意:开启enable_cbm_tracking后,不能直接执行增量备份,需要先执行全量备份,即使在开启参数之前已经执行过全量备份。
panweidb=# show enable_cbm_tracking ;
enable_cbm_tracking
---------------------
on
(1 row)
#检查omm用户的session超时参数
panweidb=# show session_timeout ;
session_timeout
-----------------
0
(1 row)
复制
数据库参数修改(主节点)
如果发现数据库中的实际参数和上面的参数对应的值不一致,需要登录到主库上,使用下面命令修改:
alter system set archive_mode=on;
alter system set archive_dest = '/archive' ;
alter system set wal_sender_timeout = '10s' ;
#若要使用增量备份,需设置参数enable_cbm_tracking = on
alter system set enable_cbm_tracking = on ;
#关闭omm用户的session超时参数:
alter user omm set session_timeout to 0;
复制
初始化备份路径(全部节点)
gs_probackup init -B /backup/probackup
# 创建备份日志目录
mkdir /backup/probackup/log/
复制
创建备份实例(全部节点)
gs_probackup add-instance -B /backup/probackup --instance=panweidb -D /data/panweidb/data -p 17700 --retention-redundancy=3 --retention-window=0
复制
设置omm用户的crontab作业(主节点)
使用omm用户配置crontab定时任务,增加如下两条定时备份任务:
- 每天00:30:00执行数据库备份,备份成功后删除过期全备份。
- 每两小时删除十天前的归档。
crontab -e
# 每天0点30分执行备份脚本
30 0 * * * /home/omm/backup_script.sh
# 每隔2小时清理归档
0 */2 * * * sh /home/omm/move_and_clear_archive.sh 9
复制
编写数据库备份脚本:
vi /home/omm/backup_script.sh
#!/bin/bash
# 获取当前日期
current_day=$(date +%d)
current_day=${current_day#0}
# 计算是否是全量备份日(假设从每月1日开始做全备份,全备份日就是:1日、4日、7日、10日、13日...28日、31日)
if [ $((current_day % 3)) -eq 1 ]; then
# 执行全量备份
source /home/omm/.bashrc;gs_probackup backup --backup-path=/backup/probackup --instance=panweidb --backup-mode=full --delete-expired --pgdatabase=postgres > /backup/probackup/log/backup_week$(date +\%u).log 2>&1 &
else
# 执行增量备份
source /home/omm/.bashrc;gs_probackup backup --backup-path=/backup/probackup --instance=panweidb --backup-mode=PTRACK --delete-expired --pgdatabase=postgres> /backup/probackup/log/backup_week$(date +\%u).log 2>&1 &
fi
复制
/home/omm/backup_script.sh脚本说明:
1、脚本中假设从每月1日开始做全量备份,全量备份日就是1日、4日、7日、10日、13日…28日、31日。
2、如果第一次自动执行备份脚本的日期正好不是全量备份日,那么增量备份会失败,因为增量备份成功的前提是必须有全量备份。需要先手工做一次全量备份再执行增量备份。
3、也可以根据实际情况修改备份脚本,以满足第一次自动执行备份脚本的日期正好是全量备份日。
编写清理归档的脚本:
vi /home/omm/move_and_clear_archive.sh
#!/bin/bash
fnum=$1
echo "begin to clear archive log..."
find /archive -mtime +${fnum} -type f -name "0000*" | xargs rm -f
echo "archive files clean successfully"
复制
查看备份集
[omm@node1 log]$ gs_probackup show --backup-path=/backup/probackup --instance=panweidb
===========================================================================================================================================
Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Type Status
===========================================================================================================================================
panweidb 9.2 SPR44E 2025-01-08 11:53:04+08 PTRACK STREAM 1/1 5s 273MB 16MB 0.94 0/15000028 0/15000270 FILE OK
panweidb 9.2 SPR407 2025-01-08 11:50:41+08 FULL STREAM 1/0 15s 782MB 16MB 0.98 0/13000028 0/13000270 FILE OK
复制
删除备份集
#删除状态是ERROR的备份集
gs_probackup delete -B /backup/probackup/ --instance=panweidb --status=ERROR
#删除指定backup-id的备份集
gs_probackup delete -B /backup/probackup --instance=panweidb -i backup-id
复制
总结
备份脚本和备份策略都可以根据实际情况灵活地去调整,以满足不同的备份需求,并且需要定期检查备份的有效性,确保在数据丢失或损坏时能够快速恢复数据库。
关于作者:
专注于Oracle、MySQL、PG、OpenGauss和国产数据库的研究,热爱生活,热衷于分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同进步~~~
最后修改时间:2025-01-08 15:05:20
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
目录