作者:姚嵩
不知道是地球人還是外星人,知道的可以留言告訴小編...
本文來源:原創(chuàng)投稿
(資料圖片)
*愛可生開源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請聯(lián)系小編并注明來源。
背景:
ob中的租戶相當(dāng)于我們平常認(rèn)知的數(shù)據(jù)庫集群,對外提供數(shù)據(jù)庫服務(wù)。
當(dāng)需要刪除ob中的租戶時,會刪除該租戶下的所有對象,包含數(shù)據(jù)庫、表等。
數(shù)據(jù)是?常重要的,為了避免意外情況,
此時,你可能需要設(shè)置多種策略,以便確認(rèn)&處理?些異常場景:
1.確認(rèn)該租戶刪除后,業(yè)務(wù)是否會有異議;
2.刪除租戶后,如果業(yè)務(wù)需要,也可以恢復(fù)該租戶;
環(huán)境說明:
ob版本: 5.7.25-OceanBase-v3.2.3.2
租戶類型: MySQL租戶
待刪租戶名: obcp_t1
刪除租戶的?概流程:
1.確認(rèn)租戶當(dāng)前是否正在被使?,如果租戶當(dāng)前正在被業(yè)務(wù)使?,則和業(yè)務(wù)溝通確認(rèn)租戶是否真的要刪除;
2.如果租戶未被使?,鎖定租戶;
3.?掉租戶現(xiàn)有的空閑連接,防?現(xiàn)有連接執(zhí)?SQL;
4.租戶鎖定N天,等待業(yè)務(wù)反饋是否受影響,避免待刪除的租戶影響業(yè)務(wù)模塊;
5.業(yè)務(wù)反饋?影響后,刪除租戶。
操作步驟:
說明:
下?的操作都是使?sys租戶下的root賬戶操作;
建議采?直接連接observer的連接?式,因為執(zhí)?kill的操作需要直連observer執(zhí)?
(kill的session_id來源于oceanbase.__all_virtual_processlist表)。
-- 設(shè)置?戶變量存儲租戶名
set @tenant_name="obcp_t1";
-- 確定租戶當(dāng)前是否正被使?
-- 如果存在?Sleep狀態(tài)的會話,需要確認(rèn)是否正在執(zhí)?SQL,如果存在,需要和業(yè)務(wù)溝通租戶是否正確
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 ;
-- 如果租戶當(dāng)前?業(yè)務(wù)執(zhí)?,鎖定租戶
-- 鎖定租戶后,就不能在該租戶上創(chuàng)建新的連接,已有連接保持不變
alter tenant obcp_t1 lock ; -- 鎖定是冪等操作,可以重復(fù)執(zhí)? select tenant_name,locked from __all_tenant ; -- 1表示鎖定,0表示未鎖定
-- ?成kill租戶會話的語句
select concat("kill ",id,";") from oceanbase.__all_virtual_processlistwhere tenant=@tenant_name;
-- (直連observer)執(zhí)?上?個步驟?成的kill語句,殺掉租戶已有的連接
kill xxx;.....
-- N天后,業(yè)務(wù)反饋?影響,再繼續(xù)租戶刪除步驟
-- (MySQL租戶可選)刪除租戶時,將租戶放?回收站,可以恢復(fù)回收站中的租戶
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 ; -- 直接刪除租戶
關(guān)鍵詞: