前面介绍了MySQL数据库在使用InnoDB引擎时,如果误删了数据表,在共享表空间MySQL数据表InnoDB引擎表误删恢复(共享表空间ibdata1)和独立表空间MySQL数据表InnoDB引擎表误删恢复(独立表空间innodb_file_per_table=1)的情况下如何恢复数据。
本文将探讨下MySQL数据库误删恢复。
后悔药数据恢复提醒您:
1,首先需要说明的是,生产环境下慎重执行删除操作,除非你确实明白自己在做什么,否则不执行危险动作。
2,有条件的情况下,依靠系统来管理数据和数据库,尽可能降低依潜在的管理的风险。
3,数据库有Update、Delete、Insert、Truncate、Drop类操作,先在测试环境执行一次,看结果和预期是否相符。生产环境执行前,先对要操作的表做一个备份,以防万一。后续将针对每个危险动作如何在生产执行时即准备好危机应对动作做一个探讨。
4,备份,备份,备份。
数据库误删,不管是使用的rm -rf testdb还是drop database testdb,最终的效果都是一样的:数据目录下的testdb目录及目录下的文件都不可见了(和之前介绍的Linux下恢复删除的情况一致),实际上文件内容依然还在那里如果没有数据覆盖上去的话。
#测试环境准备命令:
mysql> create database testdb;
Query OK, 1 row affected (0.08 sec)
mysql>
mysql> use testdb;
Database changed
mysql>
mysql> create table aa(id int not null primary key, name varchar(20));
Query OK, 0 rows affected (0.34 sec)
mysql>
mysql> insert into aa values(1,'a'),(2,'b'),(3,'c'),(4,'d');
Query OK, 4 rows affected (0.17 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from aa;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
+----+------+
4 rows in set (0.00 sec)
testdb数据库表文件:
#删除数据库:
#使用SQL命令
drop database testdb;
#使用rm
rm -rf testdb/
那么,这种情况下的数据库恢复动作就简单了,参考前面介绍Innodb引擎时的恢复方法即可:
1,完整的恢复testdb目录及目录下的文件即可找回删除掉的库名和表数据,然后针对具体的表引擎,将数据重新导入到数据库中即可。
2,如果找回的是非完整的,那么操作思路是一样的,能恢复多少恢复多少,剩余的如果实在找不回来,从最近一次的备份里提取,然后依靠其他手段比如单据来补全数据。
领取专属 10元无门槛券
私享最新 技术干货