Mysql误删表中数据与误删表的恢复方法
由于头两天面试时被问了这样一个问题,如果某同事误删了某个表,你该怎么恢复?
当时想了一下,因为博主没有遇到过这个问题,但是也多少了解一些,所以就回答通过mysql的binlog日志进行恢复。
面试官当时问了一下具体的流程。就有些懵逼了。所以就总结了一下,前提一定要做好备份!
数据库误删某表恢复方法,这个前提是针对每天有备份的数据库和开启binlog日志的 ,如果没有备份和binlog日志 恢复起来会非常非常麻烦,所以奉劝大家还是要备份!备份!备份!
/*查看数据库是否开启binlog日志*/
mysql> show variables like '%log_bin%';
+---------------------------------+---------------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------------+
| log_bin | ON |
| log_bin_basename | /home/mysql/mysql/lib/mysql-bin |
| log_bin_index | /home/mysql/mysql/lib/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+---------------------------------------+
rows in set (0.00 sec)
/*首先查看一下数据表中的数据*/ MariaDB [drop_test]> select * from python_test;
+----+-----------+------------+
| id | name | class_time |
+----+-----------+------------+
| 1 | 字典 | 3 |
| 2 | 列表 | 2 |
| 3 | 函数 | 5 |
| 4 | 装饰器 | 2 |
| 5 | 迭代器 | 2 |
+----+-----------+------------+
5 rows in set (0.00 sec)
/*备份*/
mysqldump -uroot -p111111 -B drop_test >drop_test.sql
/*再插入数据后删除数据库*/ MariaDB [drop_test]> INSERT INTO python_test(id,name,class_time) value(6,'生成器',2);
Query OK, 1 row affected (0.01 sec) MariaDB [drop_test]> INSERT INTO python_test(id,name,class_time) value(7,'类的方法',5);
Query OK, 1 row affected (0.00 sec)
删除数据库
MariaDB [drop_test]> drop database drop_test ;
Query OK, 1 row affected (0.01 sec)
切记这个时候不要有任何的操作!!!
查看当前的binlog
1 mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 4666
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
/*这个时候要将当前的binlog日志拷贝到其他目录,以免后续操作对binlog日志产生影响*/ cp /var/lib/mysql/mysql-bin.000001 /home
/*执行命令*/ 转换binlog日志为sql
mysqlbinlog -d drop_test mysql-bin.000001 >001bin.sql
编辑001bin.sql将里面的误操作命令(DROP命令)全部删除
保存后开始进行恢复数据
/*首先恢复备份文件*/
mysql -uroot -p111111 drop_test < drop_test.sql
/*查看数据库备份文件*/ MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| drop_test |
| for_bak |
| lhc |
| mysql |
| performance_schema |
| test |
+--------------------+
7 rows in set (0.00 sec) /*备份的数据已经恢复了*/ MariaDB [drop_test]> show tables;
+---------------------+
| Tables_in_drop_test |
+---------------------+
| python_test |
+---------------------+
1 row in set (0.00 sec) MariaDB [drop_test]> select * from python_test;
+----+-----------+------------+
| id | name | class_time |
+----+-----------+------------+
| 1 | 字典 | 3 |
| 2 | 列表 | 2 |
| 3 | 函数 | 5 |
| 4 | 装饰器 | 2 |
| 5 | 迭代器 | 2 |
+----+-----------+------------+
5 rows in set (0.00 sec)
接下来恢复备份之后被删除的数据
mysql -uroot -p111111 drop_test < 001bin.sql
遇到报错问题
编辑009bin.sql文件,将报错信息中提示的293行一下文件全部删除
然后重新导入
/*恢复后查看数据*/
MariaDB [drop_test]> select * from python_test;
+----+--------------+------------+
| id | name | class_time |
+----+--------------+------------+
| 1 | 字典 | 3 |
| 2 | 列表 | 2 |
| 3 | 函数 | 5 |
| 4 | 装饰器 | 2 |
| 5 | 迭代器 | 2 |
| 6 | 生成器 | 2 |
| 7 | 类的方法 | 5 |
+----+--------------+------------+
7 rows in set (0.00 sec)
以上就是数据库表被误删或数据被误删的恢复方法!
*******************总结************************
此方法只能对启动binlog日志的mysql进行恢复
恢复过程中禁止在对数据库进行任何操作
数据库乃是企业的重中之重,备份一定要做的,也不要觉得有了备份就万无一失了,定期要恢复备份文件查看备份文件与生产库数据是否同步!
Mysql误删表中数据与误删表的恢复方法的更多相关文章
- oracle计算某个表中数据所占表空间的比例
要求计算某个表所占表空间的大小,网上查了些资料用到了oracle的3个视图.具体sql如下 select segment_name as tablename, round(bytes / (selec ...
- pl/sql中误删表中数据并提交恢复办法
最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_tim ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- Mysql清空表(truncate)与删除表中数据(delete)的区别
来源:http://blog.is36.com/mysql_difference_of_truncate_and_delete/ 为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经 ...
- mysql利用navicat导出表结构和表中数据
LZ在网上搜索了要如何导出mysql的表结构和表中数据,发现有的方法不好用 记录一下好用的方式: 用navicat打开DB链接后,点击数据库,右击选择转储SQL文件,然后选择结构和数据: 之后弹出新的 ...
- 关于mysql中修改某个字段类型,以及备份表中数据到新建的表中,从新建的表中移除数据到修改过的表中
1:修改表中某个字段的类型 alter table usertable MODIFY dddd VARCHAR(50); 其中MODIFY是指修改表中字段的属性 alter表示修改表的意思 2:备份表 ...
- mysql 表中数据不存在则插入,否则更新数据
在很多时候我们会操作数据库表,但是在向表中插入数据时,会遇到表中已经存在该id的数据或者没有该id的数据的情况,没有该id的数据的情况时直接插入就OK,遇到已经存在该id的数据的情况则更新该id的数据 ...
- mysql 之 清空表中数据
清空表的时候注意外键约束 命令版 查询数据库中所有表名select table_name from information_schema.tables where table_schema='DB_n ...
- mysql 和 sqlserver中备份一张表的区别
sqlserver中备份一张表 SELECT * into qa_buglist_bak FROM qa_buglist 不管表的数据有多大,速度很快: mysql中上述语句就无效了,须得新建一张表, ...
随机推荐
- 【Codeforces 1132D】Stressful Training
Codeforces 1132 D 题意:给\(n\)个电脑的电量和耗电速度,你可以买一个充电器,它的充电速度是每秒\(v\)单位,\(v\)你自己定.问最小的\(v\)能使得在\(k\)秒内每秒给某 ...
- BSGS-Junior·大步小步算法
本文原载于:http://www.orchidany.cf/2019/02/06/BSGS-junior/#more \(\rm{0x01}\) \(\mathcal{Preface}\) \(\rm ...
- React基础篇 - 02.JSX 简介
JSX 简介 请观察下面的变量声明: const element = <h1>Hello, world!</h1>; 这种看起来可能有些奇怪的标签语法既不是字符串也不是HTML ...
- CF939D Love Rescue 并查集
传送门 题意:给出两个由小写字母构成的长度相等的字符串$S$与$T$,给出变换$c1\,c2$表示将两个字符串中所有$c1$字符变为$c2$,求将$S$和$T$通过这种变换变为相等字符串的最少变换次数 ...
- FlashWindowEx实现窗口在任务栏闪烁/变化颜色
原文:FlashWindowEx实现窗口在任务栏闪烁/变化颜色 效果类似QQ收到新的会话消息任务栏颜色变化 附2小段代码: [System.Runtime.InteropServices.DllImp ...
- 【LGR-047】洛谷5月月赛
这次我期待了很久的Luogu月赛崩掉了 传说中的Luogu神机就这样被卡爆了 然后我过了20min才登上Luogu的网站,30min后才看到题目 然后交T1TM的不给我测!!!然后又交了一次机子就炸了 ...
- YY:2018互联网创业公司应看清的事情
潮流,技术,生活方式,盈利模式,消费人群几乎每年都在改变,2018,你看到的是怎样的一盘棋. 2018年是个很好的数字,很多互联网公司寄予希望在这个幸运数字年头奋起一搏,拿到一份可观的酬金.特别是一些 ...
- Python - 内置函数 选例
概览参见 https://www.runoob.com/python/python-built-in-functions.html 官方文档 https://docs.python.org/3/li ...
- Python-注册登陆-20
username = input('请输入你要注册的用户名:') password = input('请输入你要注册的密码:') with open('list_of_info',mode='w',e ...
- vue element-ui 动态上传
上传填写完毕的幼儿及体测数据文件,上传成功后会自动导入该文件的数据 <el-upload :action="UploadUrl()" :on-success="Up ...