Skip to content

Commit 22e85b8

Browse files
committed
add some contribute of users
1 parent a51e436 commit 22e85b8

File tree

4 files changed

+513
-1
lines changed

4 files changed

+513
-1
lines changed

docs/user_manual/operation_and_maintenance/zh-CN/user_practice_co-construction/02_Best_Practices_for_Deploying_OceanBase_on_K8s.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: 在 K8S 上部署 OceanBase 的最佳实践
33
weight: 2
44
---
5-
> 本文作者:美的集团软件工程院 陈子鎏
5+
> 本文作者:美的集团软件工程院 陈子鎏(OceanBase 社区论坛账号:@qchenzi
66
77
## 目录
88
- [1. 背景与选型](#1-背景与选型)
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
---
2+
title: 误操作恢复指南
3+
weight: 3
4+
---
5+
> 本文作者:张瑞远(OceanBase 社区论坛账号:@五月)
6+
7+
> 在数据库管理中,误操作是一个常见但令人头疼的问题。无论是意外删除了重要数据、修改了关键配置,还是执行了错误的 SQL 语句,这些误操作都可能导致业务中断或数据丢失。幸运的是,OceanBase 提供了一系列机制和工具来帮助我们从误操作中恢复。本文将介绍几种有效的恢复方法,为那些可能犯错的管理员们提供一份 “后悔药”。
8+
>
9+
10+
## 一、备份与还原
11+
### 1.1 定期备份的重要性
12+
预防总是胜于治疗。定期进行全量和增量备份是防止数据丢失的第一道防线。OceanBase 支持多种备份方式,包括物理备份和逻辑备份。
13+
14+
+ **物理备份**:3.x 后期版本支持集群级别的备份 + 归档,和单独的租户全备。4.x 支持租户级别的备份 + 归档。
15+
+ **逻辑备份**:导出表结构和数据,适合小规模或特定表的数据备份。
16+
17+
### 1.2 还原策略
18+
当发生误操作时,可以从最近一次成功的备份中恢复数据。确保你有一个清晰的还原计划,并且测试过整个流程以保证其有效性。可以按照时间点恢复整个租户或者部分表。单表恢复可以参考博客[《OceanBase 单表恢复方法》](https://open.oceanbase.com/blog/15153369105)
19+
20+
## 二、闪回(Flashback)
21+
OceanBase 提供了强大的闪回功能,允许用户快速恢复到某个时间点的状态。这对于纠正短时间内的误操作非常有用。可以闪回的时间跟 undo_retention 大小有关系默认是 1800s,该值确保可以闪回 30 分钟内的数据(如果未发生转储可以闪回更早的数据,该值确保的是可闪回的下限,并非上限),以及未合并前的转储时间点前 30 分钟的区间数据。
22+
23+
### 2.1 表级闪回
24+
如果只是某张表受到了影响,可以通过以下命令将其恢复到指定的时间点:
25+
26+
+ mysql 模式根据 AS OF SNAPSHOT 指定历史时间
27+
28+
```SQL
29+
-- SNAPSHOT 转换
30+
obclient [(none)]> SELECT time_to_usec('2020-08-13 16:20:00') * 1000;
31+
+--------------------------------------------+
32+
| time_to_usec('2022-01-01 00:00:00') * 1000 |
33+
+--------------------------------------------+
34+
| 1597306800000000000 |
35+
+--------------------------------------------+
36+
37+
-- 闪回查询
38+
SELECT * FROM table1 AS OF SNAPSHOT 1597306800000000000;
39+
```
40+
41+
+ oracle 模式可以指定 scn 和时间点闪回
42+
43+
```SQL
44+
-- scn 转换
45+
obclient [(none)]>
46+
SELECT
47+
(to_date('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss')
48+
- to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss'))
49+
* 86400 * 1000 * 1000 * 1000 AS unix_nsec_timestamp
50+
FROM DUAL;
51+
+---------------------+
52+
| UNIX_NSEC_TIMESTAMP |
53+
+---------------------+
54+
| 1597306800000000000 |
55+
+---------------------+
56+
1 row in set
57+
58+
--按照 scn 闪回
59+
obclient [SYS]>
60+
SELECT * FROM table1 AS OF SCN 1597306800000000000;
61+
62+
--按照时间闪回
63+
obclient [SYS]>
64+
SELECT * FROM table1
65+
AS OF TIMESTAMP TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');
66+
```
67+
68+
可参考博客[《oceanbase 查询闪回实践》](https://open.oceanbase.com/blog/14909944160)
69+
70+
### 2.2 回收站
71+
回收站主要用于存储用户删除的数据库和表等信息。对于误删除的租户 / 数据库 / 表均可以从回收站找回(前提是开启回收站)。
72+
73+
可参考[《DBA 入门教程 —— 扩展功能》](https://www.oceanbase.com/docs/community-tutorials-cn-1000000001390115#6-title-%E5%9B%9E%E6%94%B6%E7%AB%99%EF%BC%88recyclebin%EF%BC%89)小节中的 “回收站” 部分。
74+
75+
> 请注意,启用回收站特性需要占用额外的存储空间。
76+
>
77+
78+
## 三、事务回滚
79+
### 3.1 自动提交模式下的处理
80+
默认情况下,OceanBase 使用自动提交模式,这意味着每个 SQL 语句都会立即生效。然而,在某些场景下,你可以通过设置会话变量来禁用自动提交,从而实现手动控制事务。
81+
82+
```plain
83+
SET AUTOCOMMIT = 0;
84+
85+
-- 执行一系列 SQL 语句
86+
87+
ROLLBACK; -- 或者 COMMIT;
88+
```
89+
90+
### 3.2 利用保存点
91+
即使在自动提交模式下,也可以利用保存点(Savepoint)来标记事务中的关键位置。一旦发现误操作,可以回滚到最近的一个保存点而不影响之前的工作。
92+
93+
```plain
94+
SAVEPOINT pointname;
95+
96+
-- 执行一些 SQL 语句
97+
98+
ROLLBACK TO SAVEPOINT pointname;
99+
```
100+
101+
## 四、日志分析与恢复
102+
### 4.1 重做日志(Redo Log)
103+
重做日志记录了所有对数据库所做的更改。通过分析这些日志,可以找到导致问题的具体操作,并采取相应的措施进行修复。
104+
105+
### 4.2 归档日志(Archive Log)
106+
归档日志是重做日志的副本,当系统崩溃时可以用来重建最新的状态。确保启用了归档模式,并定期归档日志文件。
107+
108+
联通软研院基于开源版OB建设的CBDB已经支持事务日志的分析,相关博客: [《oblogminer(事务日志分析)功能实现》](https://open.oceanbase.com/blog/12215815936?_gl=1*lcswrl*_ga*MjA4NzUwNzIzMy4xNjYxOTI3NjYz*_ga_T35KTM57DZ*MTczNjMxODY4Ni42MjcuMS4xNzM2MzIwMDk2LjYuMC4w)
109+
110+
## 五、备集群
111+
备集群在容灾要求高的场景中很有必要,可以分担读业务的压力。并且主库发生机房或地区,或者主集群多个zone同时故障时可以通过解耦或切换,由备集群切换为主,继续承担业务,减少业务连续性影响,以及保障数据的完整性(一般默认是最大性能模式,理论上是有损的)。
112+
113+
可以参考该博客[《OB 425 黑屏搭建集群以及三种方式搭建备库(包含主备切换)》](https://open.oceanbase.com/blog/15644177220?_gl=1*2z5h4q*_ga*MjA4NzUwNzIzMy4xNjYxOTI3NjYz*_ga_T35KTM57DZ*MTczNjMxODY4Ni42MjcuMS4xNzM2MzIwNTYyLjYwLjAuMA..) ,根据需要可以根据不同方式搭建备库,设计级联等方案。
114+
115+
## 六、单副本拉起
116+
当集群没有以上容灾和恢复条件,又遇到多副本的故障的时候,仅存的一份副本可能是最后的一份希望。但是副本已经不满足多数派要求了,用常规方法是起不来的。
117+
118+
但是通过 ob_admin 强制修改 server_list 来启服务。
119+
120+
```plain
121+
/home/admin/oceanbase/bin/ob_admin -h 168.1.2.3 -p 2882 force_set_server_list 1 168.99.88.222:2882
122+
```
123+
124+
该方法可以紧急拉起单副本,但是要尽快备份数据,或者修复集群!
125+
126+
127+
128+
**<font color="red">单副本拉起这个方法不是官方的标准操作,有很多风险(例如多数派挂了,有可能在剩余的副本上看到的已经不是最新的数据了)。这个方法是标准意义上的 “奇技淫巧”,大家了解即可。</font>**
129+
130+
131+
132+
## 七、预防措施
133+
最后,除了事后补救外,还需要加强事前预防。这包括但不限于:
134+
135+
+ **权限管理**:严格限制用户的操作权限,避免不必要的高风险操作。
136+
+ **变更控制**:引入变更审批流程,确保任何重大改动都经过充分评估。
137+
+ **培训教育**:定期对 DBA 和其他相关人员进行培训,提高他们应对突发事件的能力。
138+
+ **容灾方案**:做好容灾备份工作,是最靠谱的后悔药,以及兜底方案。
139+
140+
## 结语
141+
虽然没有真正的“后悔药”,但通过合理的规划和技术手段,我们可以大大降低误操作带来的风险。
142+
143+
希望本文提供的方法能为你在关键时刻提供帮助,让你不再为误操作而懊恼。
144+
145+
记住,最好的防御就是良好的习惯和完善的应急预案。祝你在数据库管理的道路上一帆风顺!
146+
147+
148+
行之所向,莫问远方。

0 commit comments

Comments
 (0)