原作者:凌宇骥
适用范围
mogdb交付/运维人员、zcloud交付/运维人员
问题概述
本文总结了基于BRM(Backup and Recovery Manager)的mogdb全库备份和恢复操作流程
问题原因
由于硬件故障、软件错误、人为操作失误,甚至自然灾害不可完全避免,为降低数据丢失风险,保障数据安全,客户现场通常需要有相应的备份措施。
BRM备份恢复工具的全称为:Backup and Recovery Manager。它主要设计目的是为了应对MogDB数据库集中式备份和恢复管理工作。支持数据库全量备份和WAL增量备份,可按时间点恢复数据库。
解决方案
-
安装配置BRM
创建brm目录
$ mkdir -p /tmp/brm/
解压压缩包
$ cd /tmp/brm
$ unzip brm_1.0.6_linux_amd64.zip
配置brm初始化参数文件
在/zcloud下创建目录.brm并将配置文件复制到/zcloud/.brm目录下
$ mkdir -p /zcloud/.brm
$ cp /tmp/brm/conf/brm.yaml /zcloud/.brm/
修改配置文件brm.yaml,指定备份文件存放的路径和日志存放路径,
备份数据文件存放路径
backup_home: /tmp/bkp_dir/data
备份日志存放路径
log_file: /tmp/bkp_dir/log
注:所写路径需要zcloud****用户具有创建目录权限。
**
添加备份实例**$ /tmp/brm/brm add-server --instance=zcloud_bkp --pgdata=/zcloud/dbaas/soft-install/soft/mogdb/data --pgdatabase=zcloud --pgport=26000 --pguser=zcloud --retention-redundancy=7 --retention-window=0 --archive-dir=/zcloud/dbaas/soft-install/soft/mogdb/archive_log
参数说明:
选项 说明 –instance brm中定义的备份策略实例名 –pgdata 源数据库data目录 –pgport 源数据库mogdb服务端口,默认26000 –pguser 连接源数据库所用的用户 –retention-redundancy 保留备份的份数 –retention-window 保留备份的天数,0为不限制 –archive-dir 源数据库的归档日志目录 输出:
time="2023-05-30 16:52:25.027146" level=info msg="Using config file:/zcloud/.brm/brm.yaml"
time="2023-05-30 16:52:25.027616" level=info msg="add server begin"
time="2023-05-30 16:52:25.027696" level=info msg="the gs_probackup path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_probackup"
time="2023-05-30 16:52:25.043943" level=info msg="the gs_probackup version 3.0.2"
time="2023-05-30 16:52:25.044212" level=info msg="the gs_ctl path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_ctl"
time="2023-05-30 16:52:25.062431" level=info msg="gs_ctl version "
time="2023-05-30 16:52:25.073876" level=info msg="Instance 'zcloud_bkp' version 3.0.2"
time="2023-05-30 16:52:25.087411" level=info msg="Instance 'zcloud_bkp' XLogSegSize 16777216"
time="2023-05-30 16:52:25.170743" level=info msg="Check params archive_dest"
time="2023-05-30 16:52:25.1736" level=info msg="add server end "
列出备份实例
$ ./brm list-instance
time="2023-05-30 17:00:12.322426" level=info msg="Using config file:/zcloud/.brm/brm.yaml"
time="2023-05-30 17:00:12.322993" level=info msg="the gs_probackup path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_probackup"
time="2023-05-30 17:00:12.363816" level=info msg="the gs_probackup version 3.0.2"
time="2023-05-30 17:00:12.382605" level=info msg="the gs_ctl path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_ctl"
time="2023-05-30 17:00:12.407647" level=info msg="gs_ctl version "
instance PgData PgUser PgDatabase PgVersion
zcloud_bkp /zcloud/dbaas/soft-install/soft/mogdb/data zcloud zcloud 3.0.2
查看备份实例相应的配置信息
$ ./brm list-server --instance=zcloud_bkp
time="2023-05-30 17:02:03.768617" level=info msg="Using config file:/zcloud/.brm/brm.yaml"
time="2023-05-30 17:02:03.769306" level=info msg="the gs_probackup path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_probackup"
time="2023-05-30 17:02:03.902033" level=info msg="the gs_probackup version 3.0.2"
time="2023-05-30 17:02:03.902179" level=info msg="the gs_ctl path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_ctl"
time="2023-05-30 17:02:03.920218" level=info msg="gs_ctl version "
[
{
"name": "zcloud_bkp",
"pg_data": "/zcloud/dbaas/soft-install/soft/mogdb/data",
"system_identifier": "22613152296509354",
"pgDatabase": "zcloud",
"pgPort": 26000,
"pgUser": "zcloud",
"retention_redundancy": 7,
"remote_proto": "ssh",
"remote_port": 22,
"ssh_options": "-i",
"unixSocket": "/zcloud/dbaas/soft-install/soft/mogdb/tmp",
"openGaussVersion": "3.0.2",
"xLogSegSize": 16777216,
"brmServerWalConfig": {
"nodeName": "",
"archiveDir": "/zcloud/dbaas/soft-install/soft/mogdb/archive_log",
"archiveWal": false,
"streamingArchiver": false,
"streamingArchiverName": "brm_receive_wal",
"slotName": "brm",
"autoCreateSlot": true,
"streamingArchiverBatchSize": 50,
"walRetentionRedundancy": -1,
"primaryHost": "zcloud",
"primaryHostPrvFile": "/zcloud/.ssh/id_rsa"
},
"pgpassword": ""
}
]
-
备份数据库
备份前检查
命令:
$ ./brm check --instance=zcloud_bkp
输出:
全为OK表明可进行备份
开始备份
备份数据文件
命令:
$ ./brm backup --instance=zcloud_bkp --backup-mode=full --backup-pg-log --delete-expired --delete-wal --no-validate --expire-time='2024-01-01 00:00:00+03' --merge-expired --no-sync --note='test' --skip-block-validation --smooth-checkpoint --stream --temp-slot --threads=1 --progress
参数说明:
选项 说明 –instance brm中定义的备份策略实例名 –backup-mode 备份模式(FULL|PTRACK),默认为FULL –backup-pg-log 备份pg-log目录,在备份实例中有设置 –delete-expired 备份完成后,根据保留策略删除已过期的备份 –delete-wal 删除WAL归档中的冗余文件 –no-validate 备份后不做验证 –expire-time 为生成的备份设置过期时间 –merge-expired 备份完成后,根据保留策略合并过期备份 –no-sync 不把备份文件同步到磁盘 –skip-block-validation 跳过块级别校验, 只做文件级别校验 –smooth-checkpoint 备份前做平滑checkpoint –stream 流式获取事务日志,并保存在备份中 –temp-slot 使用临时复制槽 –threads 并发线程数 –progress 输出备份进度 输出:
…
time="2023-05-30 17:08:47.369956" level=info msg="INFO: Progress: (5739/5748). Process file "base/15940/16669""
time="2023-05-30 17:08:47.553531" level=info msg="INFO: Progress: (5740/5748). Process file "base/15940/16753""
time="2023-05-30 17:08:47.70586" level=info msg="INFO: Progress: (5741/5748). Process file "base/15940/16711""
time="2023-05-30 17:08:47.892151" level=info msg="INFO: Progress: (5742/5748). Process file "base/16767/18204""
time="2023-05-30 17:08:48.081235" level=info msg="INFO: Progress: (5743/5748). Process file "base/16767/28368""
time="2023-05-30 17:08:48.267624" level=info msg="INFO: Progress: (5744/5748). Process file "undo/undometa""
…
Progress字段可以查看完成进度。
备份WAL文件(增量备份)
命令:
./brm backup-wal --instance=zcloud_bkp --delete-wal --threads=1
输出:
time="2023-05-30 17:28:42.781513" level=info msg="Using config file:/zcloud/.brm/brm.yaml"
time="2023-05-30 17:28:42.793568" level=info msg="the gs_probackup path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_probackup"
time="2023-05-30 17:28:43.052996" level=info msg="the gs_probackup version 3.0.2"
time="2023-05-30 17:28:43.059321" level=info msg="the gs_ctl path /zcloud/dbaas/soft-install/soft/mogdb/app/bin/gs_ctl"
time="2023-05-30 17:28:43.097604" level=info msg="gs_ctl version "
time="2023-05-30 17:28:43.122982" level=info msg="Instance zcloud_bkp backup wal by local archive dir"
time="2023-05-30 17:28:43.123101" level=info msg="Instance zcloud_bkp backup wal from /zcloud/dbaas/soft-install/soft/mogdb/archive_log"
time="2023-05-30 17:28:43.123497" level=info msg="Download file /zcloud/dbaas/soft-install/soft/mogdb/archive_log/00000001000000000000008E"
time="2023-05-30 17:28:43.30109" level=info msg="Download file /zcloud/dbaas/soft-install/soft/mogdb/archive_log/00000001000000000000008F"
time="2023-05-30 17:28:43.459153" level=info msg="Download file /zcloud/dbaas/soft-install/soft/mogdb/archive_log/000000010000000000000090"
time="2023-05-30 17:28:43.618387" level=info msg="Download file /zcloud/dbaas/soft-install/soft/mogdb/archive_log/000000010000000000000091"
参数说明:
选项 说明 –instance brm中定义的备份策略实例名 –delete-wal 删除WAL归档中的冗余文件 –threads 并发线程数 -
数据库恢复
停止zcloud微服务和mogdb
命令:
$ cd /zcloud/dbaas/soft-install
$ ./stop.sh --name ALL
备份当前mogdb data目录
命令:
$ cd /zcloud/dbaas/soft-install/soft/mogdb
$ mv data data.bkp
查看备份集
命令:
$ ./brm show-backup
输出:
其中ID用于恢复时制定备份集
查看WAL备份集
命令:
$ ./brm show-wal
输出:
恢复数据库数据
命令:
./brm restore --instance=zcloud_bkp --pgdata=/zcloud/dbaas/soft-install/soft/mogdb/data --backup-id=RVGS21
参数说明:
选项 说明 –instance brm中定义的备份策略实例名 –pgdata 执行恢复的目标data目录 –backup-id 备份ID,与show-backup中的ID对应 –recovery-target-lsn 以lsn作为恢复目标点 –recovery-target-name 以已命名的恢复点为目标点 –recovery-target-time 以指定的备份名为目标点 –recovery-target-xid 以事务ID为目标点 输出:
…
time="2023-05-30 19:52:58.702392" level=info msg="INFO: Restore incremental ratio (less is better): 101% (2576MB/2560MB)"
time="2023-05-30 19:52:58.702415" level=info msg="INFO: Syncing restored files to disk"
time="2023-05-30 19:53:02.893734" level=info msg="INFO: Restored backup files are synced, time elapsed: 4s"
time="2023-05-30 19:53:02.894161" level=info msg="INFO: Restore of backup RVGS21 completed."
time="2023-05-30 19:53:02.895574" level=info msg="Instance zcloud_bkp restore completed."
time="2023-05-30 19:53:02.895716" level=info msg="Instance zcloud_bkp begin write recovery.conf"
time="2023-05-30 19:53:02.895808" level=info msg="Instance zcloud_bkp no need recovery"
time="2023-05-30 19:53:02.895871" level=info msg="Instance zcloud_bkp begin start"
time="2023-05-30 19:53:02.896655" level=info msg="new instance post 26000"
time="2023-05-30 19:53:05.034095" level=info msg="Instance zcloud_bkp begin recover"
time="2023-05-30 19:53:05.034371" level=info msg="Instance zcloud_bkp recover completed"
…
蓝色内容表示恢复完成
启动mogdb与zcloud微服务
命令:
$ cd /zcloud/dbaas/soft-install/
$ ./start.sh –name ALL
登录平台,确认数据恢复完成
参考文档
BRM工具使用说明