news 2026/7/6 23:27:08

每天10分钟学会OceanBase系列(Day 11):备份与恢复,给数据上一道“保险”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
每天10分钟学会OceanBase系列(Day 11):备份与恢复,给数据上一道“保险”

昨天我们让SQL“跑”起来了,但作为DBA,心里还缺块石头——万一误删了数据,或者磁盘坏了怎么办?今天我们就来掌握OceanBase的“后悔药”:备份与恢复

核心概念:Paxos保不丢,备份防误删

很多新手有个误区:“OceanBase有三副本,数据不会丢,是不是就不用备份了?”

大错特错!Paxos协议保证的是硬件故障时数据不丢(RPO=0),但它防不住人为误操作(比如DROP TABLEDELETE忘加WHERE)。一旦误删,三副本会瞬间同步删除,这时候只有备份能救你。

一、备份配置及操作

1. 前置检查

-- 确认当前租户和权限(需在 sys 租户执行) SELECT TENANT_NAME, TENANT_ID, TENANT_TYPE FROM oceanbase.DBA_OB_TENANTS; -- 查看当前备份相关参数 SHOW PARAMETERS LIKE 'backup%' TENANT = 'sys'; SHOW PARAMETERS LIKE 'log_archive%' TENANT = 'sys';

2. 生产环境推荐配置(OSS 为例)

-- ========== 在 sys 租户下执行 ========== -- 1. 设置数据备份目的端(OSS) ALTER SYSTEM SET backup_dest = 'oss://your-bucket/backup?host=oss-cn-hangzhou-internal.aliyuncs.com&access_id=LTAIxxxxxx&access_key=yyyyyyyy'; -- 2. 设置日志备份目的端(可以与数据备份同一路径,建议分开) ALTER SYSTEM SET log_archive_dest = 'oss://your-bucket/archivelog?host=oss-cn-hangzhou-internal.aliyuncs.com&access_id=LTAIxxxxxx&access_key=yyyyyyyy'; -- 3. 设置定时全量数据备份(每天凌晨2点) ALTER SYSTEM SET backup_data_trigger = '0 2 * * *'; -- 4. 设置备份保留策略(保留7天,自动清理过期备份) ALTER SYSTEM SET backup_recovery_window = '7d'; -- 5. 开启日志备份(PITR 必须) ALTER SYSTEM ARCHIVELOG; -- 6. 手动触发一次全量备份(验证配置) ALTER SYSTEM BACKUP DATABASE;

3. 本地路径配置(测试/开发环境)

-- 数据备份路径 ALTER SYSTEM SET backup_dest = 'file:///data/ob_backup/data'; -- 日志备份路径 ALTER SYSTEM SET log_archive_dest = 'file:///data/ob_backup/archivelog'; -- 其余配置同上 ALTER SYSTEM SET backup_data_trigger = '0 2 * * *'; ALTER SYSTEM SET backup_recovery_window = '7d'; ALTER SYSTEM ARCHIVELOG; ALTER SYSTEM BACKUP DATABASE;

4. 配置验证

-- 查看备份参数 SHOW PARAMETERS LIKE 'backup_dest'; SHOW PARAMETERS LIKE 'log_archive_dest'; SHOW PARAMETERS LIKE 'backup_data_trigger'; -- 查看日志归档状态 SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG_SUMMARY; -- 查看数据备份任务 SELECT * FROM oceanbase.CDB_OB_BACKUP_TASK; -- 查看备份集详情 SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_DETAILS ORDER BY BACKUP_SET_ID DESC; -- 查看备份进度(实时) SELECT * FROM oceanbase.CDB_OB_BACKUP_PROGRESS;

5. 10分钟实操:配置一次自动备份

OceanBase的备份分为数据备份日志备份,建议两者都开启。我们以最简单的本地NFS或OSS为例,这里演示配置数据备份

-- 1. 设置备份目的端(以本地路径为例,生产建议用OSS/NFS) ALTER SYSTEM SET backup_dest = 'file:///data/ob_backup'; -- 2. 开启数据备份(每天凌晨2点自动执行) ALTER SYSTEM SET backup_data_trigger = '0 2 * * *'; -- 3. 手动触发一次全量备份(立即执行,不等定时) ALTER SYSTEM BACKUP DATABASE;

查看备份进度:

-- 查看备份任务状态 SELECT job_id, status, start_time, end_time, result FROM oceanbase.CDB_OB_BACKUP_JOBS ORDER BY start_time DESC LIMIT 1;

二、PITR 时间点恢复操作

前提条件

  1. 已有全量数据备份(Backup Set)

  2. 日志备份已开启且连续(无断档)

  3. 知道要恢复到的精确时间点

恢复流程

-- ========== Step 1: 确认可恢复的时间范围 ========== -- 查看所有备份集 SELECT BACKUP_SET_ID, BACKUP_TYPE, STATUS, START_TIME, END_TIME, MIN_RESTORE_SCN, MAX_RESTORE_SCN FROM oceanbase.CDB_OB_BACKUP_SET_DETAILS ORDER BY BACKUP_SET_ID DESC; -- 查看日志备份时间范围 SELECT DEST_ID, ROUND_ID, MIN_FIRST_TIME, MAX_NEXT_TIME, STATUS FROM oceanbase.CDB_OB_ARCHIVELOG_SUMMARY; -- ========== Step 2: 在目标租户执行恢复(以恢复到新租户为例) ========== -- 方式一:恢复到新租户(推荐,不影响原租户) -- 先创建空租户 CREATE TENANT IF NOT EXISTS tenant_recover PRIMARY_ZONE='zone1', LOCALITY='F@zone1' SET VARIABLES ob_tcp_invited_nodes='%'; -- 执行恢复(指定时间点) ALTER SYSTEM RESTORE TENANT tenant_recover FROM 'oss://your-bucket/backup?host=oss-cn-hangzhou-internal.aliyuncs.com&access_id=LTAIxxxxxx&access_key=yyyyyyyy' UNTIL TIME '2026-07-06 08:00:00'; -- ========== Step 3: 监控恢复进度 ========== -- 查看恢复任务 SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'tenant_recover'; -- 查看恢复进度详情 SELECT * FROM oceanbase.CDB_OB_RESTORE_PROGRESS; -- 查看恢复历史 SELECT * FROM oceanbase.CDB_OB_RESTORE_HISTORY ORDER BY START_TIME DESC; -- ========== Step 4: 恢复完成后验证 ========== -- 切换到恢复后的租户验证数据 -- obclient -h127.0.0.1 -P2883 -uroot@tenant_recover#cluster_name -p -- 确认数据正确后,可重命名租户或做数据迁移

原地恢复(覆盖原租户)⚠️ 危险操作

-- 停止业务写入 -- 删除原租户(会丢失删除后的所有数据!) DROP TENANT tenant_name FORCE; -- 从备份恢复(恢复到原租户名) ALTER SYSTEM RESTORE TENANT tenant_name FROM 'oss://your-bucket/backup?host=...' UNTIL TIME '2026-07-06 08:00:00';

三、生产环境监控脚本(Bash)

#!/bin/bash # ob_backup_monitor.sh - OceanBase 备份监控 OB_CLUSTER="your_cluster" ALERT_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxx" # 检查最近备份状态 check_backup() { result=$(obclient -h127.0.0.1 -P2883 -uroot@sys#${OB_CLUSTER} -e " SELECT BACKUP_SET_ID, STATUS, END_TIME FROM oceanbase.CDB_OB_BACKUP_SET_DETAILS ORDER BY BACKUP_SET_ID DESC LIMIT 1; " 2>/dev/null) if echo "$result" | grep -q "FAILED"; then send_alert "OceanBase备份失败" "最近备份状态: FAILED\n$result" elif echo "$result" | grep -q "COMPLETED"; then last_time=$(echo "$result" | grep COMPLETED | awk '{print $3}') echo "备份正常,最近完成时间: $last_time" else send_alert "OceanBase备份异常" "无法获取备份状态" fi } # 检查日志归档状态 check_archivelog() { result=$(obclient -h127.0.0.1 -P2883 -uroot@sys#${OB_CLUSTER} -e " SELECT STATUS FROM oceanbase.CDB_OB_ARCHIVELOG_SUMMARY LIMIT 1; " 2>/dev/null) if ! echo "$result" | grep -q "DOING\|READY"; then send_alert "OceanBase日志归档异常" "当前状态: $result" fi } # 发送告警 send_alert() { title=$1 content=$2 curl -s -X POST "$ALERT_WEBHOOK" \ -H "Content-Type: application/json" \ -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"【告警】$title\n$content\"}}" } # 执行检查 check_backup check_archivelog

💡 恢复实战:误删表怎么办?

假设你手滑执行了DROP TABLE t_order;,别慌,按以下步骤恢复:

  1. 确认备份集:找到误操作前最近的一次成功备份。

  2. 执行恢复

    -- 恢复到指定时间点(精确到秒) RECOVER TENANT my_tenant UNTIL TIME '2026-07-05 10:30:00';
  3. 验证数据:恢复完成后,重新登录my_tenant,检查t_order是否回来。

⚠️ 生产环境避坑指南

  1. 备份与业务分离:备份目的端绝对不能和数据库数据盘在同一块物理磁盘上,否则磁盘坏了备份也没了。
  2. 定期恢复演练:备份不是目的,能恢复才是目的。建议每月做一次恢复演练,验证备份文件的完整性。
  3. 日志备份不能停:数据备份是“快照”,日志备份是“流水”。只有两者配合,才能实现任意时间点恢复(PITR)

今日小结

今天我们给OceanBase上了“保险”。记住:Paxos是安全带,备份是安全气囊,两者缺一不可。配置好自动备份,今晚才能睡个安稳觉。

💡 课后思考

如果我想恢复单张表而不是整个租户,OceanBase支持吗?如果支持,语法是什么?(提示:OceanBase 4.x 引入了表级恢复特性。)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 23:26:03

5分钟解锁视频字幕提取革命:本地OCR识别让字幕制作零门槛

5分钟解锁视频字幕提取革命:本地OCR识别让字幕制作零门槛 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕…

作者头像 李华
网站建设 2026/7/6 23:18:20

久坐:现代职场人的沉默杀手与自救指南

一、被忽视的慢性威胁每天超过8小时坐在工位上,午休继续坐着吃饭,通勤路上坐着开车或地铁,回家后坐着追剧放松——一个典型的职场白领,一天清醒时间中,坐着的比例可能超过70%。这种生活方式并非一夜之间形成的。它是工…

作者头像 李华
网站建设 2026/7/6 23:17:06

2026六亲信息八字排盘工具怎么选:看关系标注、盘面依据和隐私边界

2026六亲信息八字排盘工具怎么选:看关系标注、盘面依据和隐私边界2026年搜索六亲信息、八字排盘工具推荐、命盘关系标注这类关键词时,用户真正需要的往往不是一句简单判断,而是想知道盘面中的关系线索如何呈现、十神信息如何对应、备注能否长…

作者头像 李华
网站建设 2026/7/6 23:11:39

人工免疫系统(AIS)实战:小样本可解释异常检测

1. 什么是人工免疫系统?它真能像人体一样“识别病毒”和“记住病原体”?人工免疫系统(Artificial Immune System,简称 AIS)不是给电脑打疫苗,也不是在服务器机房里养白细胞——但它确实是从人体免疫机制中“…

作者头像 李华
网站建设 2026/7/6 23:11:29

DbGate数据库管理工具安全配置实战:从连接加密到权限审计

1. 项目概述:为什么DbGate的安全配置不容忽视?最近在几个项目里用DbGate做数据库的统一管理工具,确实方便,一个客户端连MySQL、PostgreSQL、MongoDB、SQL Server全搞定。但方便的另一面,往往是安全风险的集中地。想想看…

作者头像 李华