防删库实用指南 | 只需一步,快速召回被误删的表
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,作者黄忠,阿里云数据库技术专家数据库的一些非常不错的企业级功能都是"养兵千日,用兵一时",比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删
千家信息网最后更新 2025年01月21日防删库实用指南 | 只需一步,快速召回被误删的表*请左右滑动阅览 mysql> set global recycle_bin=on;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'recycle_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| recycle_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
接下来让我们来创建一个表,插入一些数据,进行功能测试和验证。如下所示:
*请左右滑动阅览 mysql> use test;
Database changed
mysql> create table t_recycle_bin_demo (col1 int not null);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t_recycle_bin_demo values (1),(2);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t_recycle_bin_demo;
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
假设这是一张很重要的表,并且被意外Drop掉了,让我们来看一下如何找回这张表的数据。如下所示: *请左右滑动阅览 mysql> drop table t_recycle_bin_demo;
Query OK, 0 rows affected (0.01 sec)
mysql> call dbms_recycle.show_tables();
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
| SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
| __recycle_bin__ | __innodb_1073 | test | t_recycle_bin_demo | 2020-02-27 06:48:24 | 2020-03-05 06:48:24 |
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> select * from `__recycle_bin__`.`__innodb_1073`;
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
可以看到,AliSQL在开启回收站功能的情况下,被删除的表被移到了"__recycle_bin__"数据库下面,可以通过Select语句直接访问读出被删除的数据以进行恢复,这样就找回了你的重要数据。和Oracle不同的地方是,"__recycle_bin__"数据库访问需要明确的授权操作,这样可以防止表的所有者(可能是恶意者)同步清理回收站中的表。比如我用一般用户登进去操作,就会报权限错误,如下所示: *请左右滑动阅览 mysql> select * from `__recycle_bin__`.`__innodb_1073`;
ERROR 1142 (42000): SELECT command denied to user 'test'@'localhost' for table '__innodb_1073'
mysql> call dbms_recycle.purge_table('__innodb_1073');
ERROR 1142 (42000): DROP command denied to user 'test'@'localhost' for table '__innodb_1073'
作者
黄忠,阿里云数据库技术专家
数据库的一些非常不错的企业级功能都是"养兵千日,用兵一时",比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删除一个表空间、一个用户(Schema)时,可能会删除很多的表,包括你不想删除的一些表。
这种例子还是很多的,早些年很多的DBA使用图形工具来访问数据库,所连接的用户权限又比较高,当查询大量数据引起图形工具短暂失去响应时,很容易多打几下键盘或者多点几下鼠标,等到图形工具响应过来,发现些表或某些用户已经不见了。
前面讲的是无心之过,还可以看到一些有心的恶意操作,比如因员工和公司的关系不够友善引起的破坏性操作。这时就可以检查一下Oracle数据库回收站中是否还有被删除的表。
AliSQL是阿里云RDS MySQL团队精心打造的一个分支,在性能、功能、稳定性上都有极大的提升和突破。在2019年12月份发布的版本中也带了Recycle Bin功能,只需要设置一个参数就可以开启:
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'recycle_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| recycle_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
Database changed
mysql> create table t_recycle_bin_demo (col1 int not null);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t_recycle_bin_demo values (1),(2);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t_recycle_bin_demo;
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
mysql> call dbms_recycle.show_tables();
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
| SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
| __recycle_bin__ | __innodb_1073 | test | t_recycle_bin_demo | 2020-02-27 06:48:24 | 2020-03-05 06:48:24 |
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> select * from `__recycle_bin__`.`__innodb_1073`;
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
ERROR 1142 (42000): SELECT command denied to user 'test'@'localhost' for table '__innodb_1073'
mysql> call dbms_recycle.purge_table('__innodb_1073');
ERROR 1142 (42000): DROP command denied to user 'test'@'localhost' for table '__innodb_1073'
可以看到通过AliSQL的回收站功能,以及精心规划的权限管理机制,可以有效地处理表被意外或恶意删除的问题,确保你的数据安全。
数据
功能
数据库
回收站
用户
图形
图形工具
工具
恶意
权限
重要
意外
情况
阿里
不同
不错
有效
特殊
养兵千日
用兵一时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
泛亚软件开发
龙腾网络技术服务有限公司
乡镇网络安全周总结报告
软件开发一年多少学费
mybatis查询2个数据库
软件开发加计扣除比例
软件开发需不需要学c语言
太仓电子网络技术包括什么
武汉市排水管网隐患数据库标准
山东软件开发专升本
如何把用户信息传到数据库上
苹果有多少服务器
软件开发如何收费标准
学java后学什么数据库好
gen9服务器
广西电信手机上网服务器代码
服务器 介绍
杭州雄程网络技术
小敏家数据库系统概念
房屋销售管理系统数据库单表查询
中国人民银行官网是数据库吗
蚂蚁数据库和阿里数据库
移动安全认证服务器
网络安全股龙头有哪些
sql数据库跨年查询
如何管理服务器上的代码
国产数据库 厂商
网络安全周问卷调差
小鹅网络技术有限公司利润表
如何认定为软件开发企业