防删库实用指南 | 只需一步,快速召回被误删的表
作者
黄忠,阿里云数据库技术专家
数据库的一些非常不错的企业级功能都是“养兵千日,用兵一时”,比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删除一个表空间、一个用户(Schema)时,可能会删除很多的表,包括你不想删除的一些表。
这种例子还是很多的,早些年很多的DBA使用图形工具来访问数据库,所连接的用户权限又比较高,当查询大量数据引起图形工具短暂失去响应时,很容易多打几下键盘或者多点几下鼠标,等到图形工具响应过来,发现些表或某些用户已经不见了。
前面讲的是无心之过,还可以看到一些有心的恶意操作,比如因员工和公司的关系不够友善引起的破坏性操作。这时就可以检查一下Oracle数据库回收站中是否还有被删除的表。
AliSQL是阿里云RDS MySQL团队精心打造的一个分支,在性能、功能、稳定性上都有极大的提升和突破。在2019年12月份发布的版本中也带了Recycle Bin功能,只需要设置一个参数就可以开启:
QueryOK,0rowsaffected(0.00sec)
mysql>showglobalvariableslike'recycle_bin';
+---------------+-------+
|Variable_name|Value|
+---------------+-------+
|recycle_bin|ON|
+---------------+-------+
1rowinset(0.00sec)
Databasechanged
mysql>createtablet_recycle_bin_demo(col1intnotnull);
QueryOK,0rowsaffected(0.01sec)
mysql>insertintot_recycle_bin_demovalues(1),(2);
QueryOK,2rowsaffected(0.00sec)
Records:2Duplicates:0Warnings:0
mysql>select*fromt_recycle_bin_demo;
+------+
|col1|
+------+
|1|
|2|
+------+
2rowsinset(0.00sec)
QueryOK,0rowsaffected(0.01sec)
mysql>calldbms_recycle.show_tables();
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
|SCHEMA|TABLE|ORIGIN_SCHEMA|ORIGIN_TABLE|RECYCLED_TIME|PURGE_TIME|
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
|__recycle_bin__|__innodb_1073|test|t_recycle_bin_demo|2020-02-2706:48:24|2020-03-0506:48:24|
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
1rowinset(0.00sec)
mysql>select*from`__recycle_bin__`.`__innodb_1073`;
+------+
|col1|
+------+
|1|
|2|
+------+
2rowsinset(0.00sec)
ERROR1142(42000):SELECTcommanddeniedtouser'test'@'localhost'fortable'__innodb_1073'
mysql>calldbms_recycle.purge_table('__innodb_1073');
ERROR1142(42000):DROPcommanddeniedtouser'test'@'localhost'fortable'__innodb_1073'
可以看到通过AliSQL的回收站功能,以及精心规划的权限管理机制,可以有效地处理表被意外或恶意删除的问题,确保你的数据安全。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。