技術分享 | OceanBase 租戶延遲刪除
作者:楊濤濤
資深資料庫專家,專研 MySQL 十餘年。擅長 MySQL、PostgreSQL、MongoDB 等開源資料庫相關的備份恢復、SQL 調優、監控運維、高可用架構設計等。目前任職於愛可生,為各大運營商及銀行金融企業提供 MySQL 相關技術支援、MySQL 相關課程培訓等工作。
本文來源:原創投稿
OceanBase 關於租戶的刪除設計了以下三種方式:
正常刪除:租戶 裡的各種物件也被刪除,具體表現形式依賴sys租戶回收站功能是否開啟。 延遲刪除:保留一段時間的租戶資料,等時間到期後,再刪除租戶。 立即刪除:徹底丟棄租戶!
對於第二種方式,之前同事們有內部討論過 OceanBase 的設計初衷:有可能是以防租戶被誤刪、或者是給費用到期並且不續租的租戶一段緩衝的時間,讓他能在時間到期前備份自己的資料。
租戶的刪除語法為:
DROP TENANT [IF EXISTS] tenant_name [PURGE|FORCE];
DROP TENANT:依賴sys租戶回收站是否開啟,有兩種表現形式。
回收站 開啟,刪除的租戶會 進入回收站,後續可以透過回收站還原此租戶! 回收站 關閉,此操作租戶被 刪除,但是可以讓租戶資料保留一段時間(由配置引數schema_history_expire_time 來設定)。在此期間租戶仍然可以進行DML操作,保證遺留業務的正常執行。OceanBase 會有一個後臺垃圾清理執行緒在時間到期後徹底刪除租戶。
DROP TENANT PURGE:此操作僅延遲刪除租戶,且具體表現形式和回收站是否開啟無關。也即無論回收站開啟與否,刪除的租戶都不會進入回收站,而是到期後,由後臺垃圾清理執行緒刪除租戶。
DROP TENANT FORCE:此操作立刻刪除租戶!
先來建立兩個新租戶 tenant1、tenant2 。
mysql:5.6.25:oceanbase>create resource unit mini1 max_cpu 1,max_memory '1G',max_disk_size '1G',max_session_num 1200,max_iops 1000;
Query OK, 0 rows affected (0.015 sec)
<mysql:5.6.25:oceanbase>create resource pool p3 unit 'mini1',unit_num=1;
Query OK, 0 rows affected (0.038 sec)
<mysql:5.6.25:oceanbase>create resource pool p4 unit 'mini1',unit_num=1;
Query OK, 0 rows affected (0.062 sec)
<mysql:5.6.25:oceanbase>create tenant tenant1 resource_pool_list=('p3');
Query OK, 0 rows affected (2.660 sec)
<mysql:5.6.25:oceanbase>create tenant tenant2 resource_pool_list=('p4');
回收站開啟,刪除租戶 tenant1 : 查詢系統表 __all_tenant ,租戶 tenant1 已經被刪除,但是租戶資料存放在 sys 租戶回收站裡,可以隨時被恢復。
mysql:5.6.25:oceanbase>set recyclebin=on;
Query OK, 0 rows affected (0.000 sec)
<mysql:5.6.25:oceanbase>drop tenant tenant1;
Query OK, 0 rows affected (0.040 sec)
<mysql:5.6.25:oceanbase>show recyclebin;
+--------------------------------+---------------+--------+----------------------------+
| OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME |
+--------------------------------+---------------+--------+----------------------------+
| __recycle_$_1_1678073859469312 | tenant1 | TENANT | 2023-03-06 12:07:21.626602 |
+--------------------------------+---------------+--------+----------------------------+
1 row in set (0.012 sec)
<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant1';
Empty set (0.001 sec)
從回收站恢復租戶 tenant1 :再次查詢系統表 __all_tenant ,租戶 tenant1 恢復正常。
mysql:5.6.25:oceanbase>flashback tenant tenant1 to before drop;
Query OK, 0 rows affected (0.044 sec)
<mysql:5.6.25:oceanbase>show recyclebin;
Empty set (0.003 sec)
<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant1';
+-------------+
| tenant_name |
+-------------+
| tenant1 |
+-------------+
1 row in set (0.002 sec)
回收站關閉,刪除租戶 tenant1:刪除後,依然可以透過系統表 __all_tenant 查詢到租戶資訊。
mysql:5.6.25:oceanbase>set recyclebin=off;
Query OK, 0 rows affected (0.001 sec)
<mysql:5.6.25:oceanbase>drop tenant tenant1;
Query OK, 0 rows affected (0.041 sec)
<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant1';
+-------------+
| tenant_name |
+-------------+
| tenant1 |
+-------------+
1 row in set (0.001 sec)
直到配置項 schema_history_expire_time 設定的時間到期前,租戶 tenant1 都可以對其內部物件正常操作:比如 DQL 語句 、DML 語句等。
[root@ytt-pc obytt111]# obclient -uroot@tenant1#ob-ytt -P 2883 -cA -h 127.1 -D ytt -e "select * from t1;"
+----+
| id |
+----+
| 1 |
| 2 |
+----+
[root@ytt-pc obytt111]# obclient -uroot@tenant1#ob-ytt -P 2883 -cA -h 127.1 -Dytt -e "insert into t1 values (10)"
但是無法執行 DDL 語句:比如新建表 t2 則會報錯!
[root@ytt-pc obytt111]# obclient -uroot@tenant1#ob-ytt -P 2883 -cA -h 127.1 -Dytt -e "create table t2 like t1;"
ERROR 4179 (HY000) at line 1: ddl operation during dropping tenant not allowed
DROP TENANT tenant2 PURGE:延遲刪除租戶,同樣是等配置項 schema_history_expire_time 設定的時間到期後,徹底將租戶刪除,和上面例子類似。
<mysql:5.6.25:oceanbase>drop tenant tenant2 purge;
Query OK, 0 rows affected (0.055 sec)
<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name ='tenant2';
+-------------+
| tenant_name |
+-------------+
| tenant2 |
+-------------+
1 row in set (0.002 sec)
DROP TENANT tenant2 FORCE :後續不再需要租戶 tenant2 ,可以立即刪除。
mysql:5.6.25:oceanbase>drop tenant tenant2 force;
Query OK, 0 rows affected (0.050 sec)
<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant2';
Empty set (0.002 sec)
本文關鍵字:#OceanBase# #租戶刪除#
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2938828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術分享 | OceanBase 資源及租戶管理
- 【多租戶技術】
- OB運維 | tenant--刪除租戶的命令運維NaN
- 技術分享 | OceanBase 裡的 BUFFER 表
- OB運維 | tenant--刪除租戶的流程設計運維NaN
- 得物直播低延遲探索 | 得物技術
- OceanBase學習之路7|透過 MySQL 客戶端連線 OceanBase 租戶MySql客戶端
- 閃回刪除技術:
- 技術分享 | OceanBase 手滑誤刪了資料檔案怎麼辦
- OceanBase學習之路6|透過 Obclient 連線 OceanBase 租戶client
- 技術分享 | 使用 RPM 部署 Oceanbase Proxy
- Oracle 12c 多租戶 手工建立 pdb 與 手工刪除 pdbOracle
- VIM Lazy Load 懶載入/延遲載入技術
- 實時雲渲染關鍵技術-低延遲詳解
- Jquery.ScrollLoading圖片延遲載入技術jQuery
- OceanBase學習之路13|體驗多租戶特性
- OceanBase學習之路54|如何配置多租戶管理?
- 技術分享 | 用圖資料庫來降低 MySQL 處理多層關係的延遲(一)資料庫MySql
- 「視訊直播技術詳解」系列之五:延遲優化優化
- OceanBase 原始碼解讀(五):租戶的一生原始碼
- 技術解讀資料庫如何實現“多租戶”?資料庫
- 基於HTML5樹元件延遲載入技術實現HTML元件
- 技術分享 | LSM-Tree 和 OceanBase 分層轉儲
- 技術分享 | OceanBase 資料處理之控制檔案
- C#/C++ 透過ODBC連線OceanBase Oracle租戶C#C++Oracle
- 為什麼延遲刪除可以保證MYSQL 與redis的一致性?MySqlRedis
- 『開源』大半夜除錯TCP延遲問題除錯TCP
- 專案分享六:圖片的延遲載入
- HT for Web的HTML5樹元件延遲載入技術實現WebHTML元件
- OceanBase學習之路40|如何將資源池分配給租戶?
- OceanBase學習之路53|多租戶管理引數如何設定?
- RabbitMQ延遲訊息的延遲極限是多少?MQ
- Spring Boot 構建多租戶SaaS平臺核心技術指南Spring Boot
- 【解決方案】多租戶技術架構設計入門(一)架構
- [重慶思莊每日技術分享]-執行DROP USER ... CASCADE操作刪除很慢
- 延遲釋出
- 低延遲音視訊傳輸技術在直播領域的應用
- 多租戶