作者:姚嵩
【資料圖】
不知道是地球人還是外星人,知道的可以留言告訴小編...
本文來源:原創投稿
*愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源。
背景:
ob中的租戶相當于我們平常認知的數據庫集群,對外提供數據庫服務。
當需要刪除ob中的租戶時,會刪除該租戶下的所有對象,包含數據庫、表等。
數據是?常重要的,為了避免意外情況,
此時,你可能需要設置多種策略,以便確認&處理?些異常場景:
1.確認該租戶刪除后,業務是否會有異議;
2.刪除租戶后,如果業務需要,也可以恢復該租戶;
環境說明:
ob版本: 5.7.25-OceanBase-v3.2.3.2
租戶類型: MySQL租戶
待刪租戶名: obcp_t1
刪除租戶的?概流程:
1.確認租戶當前是否正在被使?,如果租戶當前正在被業務使?,則和業務溝通確認租戶是否真的要刪除;
2.如果租戶未被使?,鎖定租戶;
3.?掉租戶現有的空閑連接,防?現有連接執?SQL;
4.租戶鎖定N天,等待業務反饋是否受影響,避免待刪除的租戶影響業務模塊;
5.業務反饋?影響后,刪除租戶。
操作步驟:
說明:
下?的操作都是使?sys租戶下的root賬戶操作;
建議采?直接連接observer的連接?式,因為執?kill的操作需要直連observer執?
(kill的session_id來源于oceanbase.__all_virtual_processlist表)。
-- 設置?戶變量存儲租戶名
set @tenant_name="obcp_t1";
-- 確定租戶當前是否正被使?
-- 如果存在?Sleep狀態的會話,需要確認是否正在執?SQL,如果存在,需要和業務溝通租戶是否正確
select user,tenant,host,db,command,svr_ip,user_client_ip, trans_id,thread_id,total_time,infofrom oceanbase.__all_virtual_processlistwhere tenant=@tenant_name and command!="Sleep"order by total_time desc ;
-- 如果租戶當前?業務執?,鎖定租戶
-- 鎖定租戶后,就不能在該租戶上創建新的連接,已有連接保持不變
alter tenant obcp_t1 lock ; -- 鎖定是冪等操作,可以重復執? select tenant_name,locked from __all_tenant ; -- 1表示鎖定,0表示未鎖定
-- ?成kill租戶會話的語句
select concat("kill ",id,";") from oceanbase.__all_virtual_processlistwhere tenant=@tenant_name;
-- (直連observer)執?上?個步驟?成的kill語句,殺掉租戶已有的連接
kill xxx;.....
-- N天后,業務反饋?影響,再繼續租戶刪除步驟
-- (MySQL租戶可選)刪除租戶時,將租戶放?回收站,可以恢復回收站中的租戶
set recyclebin=1; DROP TENANT obcp_t1 ;show parameters like "recyclebin_object_expire_time"; -- 查看?動清理回收站的時間
-- 直接刪除租戶
drop tenant ${object_name} force ; -- 刪除回收站中的租戶,object_name可由show recyclebin獲取drop tenant obcp_t1 force ; -- 直接刪除租戶
標簽: