一、背景
在当今数智化、AI时代,数据已成为企业、组织乃至个人的核心资产,而数据库备份,恰似守护这些关键资产的“安全锁”,其重要性不言而喻。磐维集中式数据库备份和分布式备份命令不太相同。本文主要在测试环境进行演示磐维分布式数据库备份部署过程,希望对大家有所帮助!
磐维集中式备份部署过程请参考:
磐维集中式数据库备份部署
二、环境说明
| 主机名 | ip地址 | OS版本 | 内存、CPU | 数据库版本 |
|---|---|---|---|---|
| node1 | 192.*.*.60 | Centos7.9 | 4G 、 1个双核 | PanWeiDB_V2.0(openGauss)-distributed version-3.0.1_B01 |
| node2 | 192.*.*.62 | Centos7.9 | 4G 、 1个双核 | PanWeiDB_V2.0(openGauss)-distributed version-3.0.1_B01 |
| node3 | 192.*.*.64 | Centos7.9 | 4G 、 1个双核 | PanWeiDB_V2.0(openGauss)-distributed version-3.0.1_B01 |
集群状态如下:
[omm@node1 ~]$ ha_ctl monitor all -l http://192.*.*.60:2379 -HI +----+------------+----------------+-------+---------+--------+ | No | name | host | port | state | leader | +----+------------+----------------+-------+---------+--------+ | 0 | ha_server1 | 192.*.*.60 | 20001 | running | True | +----+------------+----------------+-------+---------+--------+ +----+------+----------------+------+----------------+---------+---------+ | No | name | host | port | work_dir | state | role | +----+------+----------------+------+----------------+---------+---------+ | 0 | gtm1 | 192.*.*.60 | 6666 | /data/gtm/gtm1 | running | standby | | 1 | gtm2 | 192.*.*.62 | 6666 | /data/gtm/gtm2 | running | primary | +----+------+----------------+------+----------------+---------+---------+ +----+------+----------------+------+-----------------+---------+---------+ | No | name | host | port | work_dir | state | role | +----+------+----------------+------+-----------------+---------+---------+ | 0 | cn1 | 192.*.*.62 | 5432 | /data/coord/cn1 | running | primary | | 1 | cn2 | 192.*.*.64 | 5432 | /data/coord/cn2 | running | primary | +----+------+----------------+------+-----------------+---------+---------+ +----+-------+-------+----------------+-------+-----------------+---------+---------+ | No | group | name | host | port | work_dir | state | role | +----+-------+-------+----------------+-------+-----------------+---------+---------+ | 0 | dn1 | dn1_1 | 192.*.*.62 | 15432 | /data/dn1/dn1_1 | running | primary | | 1 | dn1 | dn1_2 | 192.*.*.64 | 15432 | /data/dn1/dn1_2 | running | standby | | 2 | dn1 | dn1_3 | 192.*.*.60 | 15432 | /data/dn1/dn1_3 | running | standby | | 3 | dn2 | dn2_1 | 192.*.*.64 | 20010 | /data/dn2/dn2_1 | running | primary | | 4 | dn2 | dn2_2 | 192.*.*.60 | 20010 | /data/dn2/dn2_2 | running | standby | | 5 | dn2 | dn2_3 | 192.*.*.62 | 20010 | /data/dn2/dn2_3 | running | standby | +----+-------+-------+----------------+-------+-----------------+---------+---------+ +----+----------------------------+--------+---------+----------+ | No | url | name | state | isLeader | +----+----------------------------+--------+---------+----------+ | 0 | http://192.*.*.64:2379 | node_2 | healthy | False | | 1 | http://192.*.*.62:2379 | node_1 | healthy | False | | 2 | http://192.*.*.60:2379 | node_0 | healthy | True | +----+----------------------------+--------+---------+----------+
三、备份前准备
1、规划备份路径
本文中备份目录设置为/backup。生产环境中备份目录最好单独挂盘,以防磁盘损坏等原因影响到备份数据,从而降低数据丢失的风险。
2、制定备份策略
- 每周六 00:30:00 执行数据库全备份,备份成功后删除过期全备份。
- 每周日到周五 00:30:00 执行数据库增量备份。
- 每天删除2*7天前的归档。
- 编写完backup.yml文件必须进行一次全量备份
3、创建备份用户
在node2主机上使用gsql登录cn节点,创建备份用户,并授予sysadmin权限。
gsql -d postgres -p 5432
create user bkuser identified by "xxxxxxxx" sysadmin;
操作截图如下:

注意:备份用户必须具有sysadmin权限。
4、设置备份目录,开启wal日志归档,设置wal日志归档
-- 远程备份设置
ha_ctl deploy 192.*.*.200 -l http://192.*.*.60:2379 说明:192.*.*.200是远程备份机的ip。
4.1 备份机(或者一般选用gtm的主 10.xx.xx.62)上创建备份目录backup,用于存放基础备份wal日志归档
mkdir /backup
cd /backup/
mkdir gtm_wal dn1_wal dn2_wal dn3_wal
操作截图如下:

4.2、在各DN所在节点创建对应的/backup目录并且赋权
mkdir /backup chown -R omm:dbgrp /backup chmod -R 755 /backup
操作截图如下:



4.3、数据库开启wal日志归档,设置wal日志归档
su - omm
gs_guc reload -N all -I all -Z datanode -c "archive_mode=on"
gs_guc reload -N all -I all -Z gtm -c "archive_mode=on"
gs_guc reload -N all -I all -Z datanode -c "enable_cbm_tracking=on"
gs_guc reload -N all -I all -Z gtm -c "enable_cbm_tracking=on"
ha_ctl set gtm gtm1 -p archive_command="'scp %p 192.*.*.62:/backup/gtm_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set gtm gtm2 -p archive_command="'scp %p 192.*.*.62:/backup/gtm_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set datanode dn1_1 -p archive_command="'scp %p 192.*.*.62:/backup/dn1_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set datanode dn1_2 -p archive_command="'scp %p 192.*.*.62:/backup/dn1_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set datanode dn1_3 -p archive_command="'scp %p 192.*.*.62:/backup/dn1_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set datanode dn2_1 -p archive_command="'scp %p 192.*.*.62:/backup/dn2_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set datanode dn2_2 -p archive_command="'scp %p 192.*.*.62:/backup/dn2_wal/%f'" -c panwei -l http://192.*.*.60:2379
ha_ctl set datanode dn2_3 -p archive_command="'scp %p 192.*.*.62:/backup/dn2_wal/%f'" -c panwei -l http://192.*.*.60:2379
操作截图如下:


5、创建备份配置文件
使用omm用户登录gtm主节点创建备份配置文件/backup/backup.yml:
vi /backup/backup.yml
#if set backup_host and backup_dir
#1) nodes parameter not need set
#2) will set archive wal log dir as backup_dir/nodes/wal,such as:backup_dir/gtm/wal
#backup_host: 100.0.1.61 #or local
#backup_dir: /home/omm/backup1
# parallel: 1
gtm:
backup_host: 192.*.*.62
backup_dir: /backup/gtm
tbs_dir: /backup/gtm_tbs
datanode:
- dn1:
backup_host: 192.*.*.62
backup_dir: /backup/dn1
tbs_dir: /backup/dn1_tbs
- dn2:
backup_host: 192.*.*.62
backup_dir: /backup/dn2
tbs_dir: /backup/dn2_tbs
注意:gtm和datanode各节点的backup_dir、tbs_dir对应的目录都不需要提前创建,备份命令执行后会自动创建。
四、备份部署
1、执行全量备份
ha_ctl backup all -p /backup -c panwei -U bkuser -W '******' -l http://192.*.*.60:2379
截图如下:

2、查看备份集
ha_ctl backup show -p /backup -l http://192.*.*.60:2379
截图如下:

3、执行增量备份
ha_ctl backup all -p /backup -c panwei -U bkuser -W '******' -a '-b PTRACK' -l http://192.*.*.60:2379
截图如下:

4、查看备份集
ha_ctl backup show -p /backup -l http://192.*.*.60:2379
截图如下:

5、删除单个备份:
ha_ctl backup delete -a '-i 备份id' -p /backup -l http://192.*.*.60:2379
6、查看备份参数:
ha_ctl backup show-config -l http://192.*.*.60:2379 -p /backup
截图如下:

7、 配置备份定时任务
使用omm用户配置crontab定时任务,增加如下两条定时备份任务:
- 每周六 00:30:00 执行数据库全备份,备份成功后删除过期全备份。
- 每周日到周五 00:30:00 执行数据库增量备份。
- 每天删除2*7天前的归档。
注意:
1、编写完backup.yml文件必须进行一次全量备份
2、保留备份周期(一次全备加N个增备到下一次全备代表一个完整的周期,需要先进行全量备份才可以设置set-config):
ha_ctl backup set-config -a '--retention-redundancy=2' -l http://192.*.*.60:2379 -p /backup

在备份机或者gtm主节点添加:
crontab -e
30 0 * * 6 source /home/omm/.bashrc;ha_ctl backup all -p /backup -c panwei -U bkuser -W '******' -a '--delete-expired' -l http://192.*.*.60:2379 &
30 0 * * * source /home/omm/.bashrc;ha_ctl backup all -a '-b PTRACK --delete-expired' -p /backup -c panwei -U bkuser -W '******' -l http://192.*.*.60:2379 &
0 */2 * * * sh /home/omm/move_and_clear_archive.sh
清理归档脚本:
vi /home/omm/move_and_clear_archive.sh
#!/bin/bash
fnum=$1
echo "begin to clear archive log..."
find /backup/gtm_wal -mtime +${fnum} -type f -name "0000*" | xargs rm -f
find /backup/dn1_wal -mtime +${fnum} -type f -name "0000*" | xargs rm -f
find /backup/dn2_wal -mtime +${fnum} -type f -name "0000*" | xargs rm -f
echo "archive files clean successfully"
五、总结
数据库备份至关重要,在生产系统业务上线前务必部署好备份任务。
关于作者:
网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证以及OBCA、KCP、ACP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~




