Mysql误删表中数据与误删表的恢复方法


数据库误删某表恢复方法,这个前提是针对每天有备份的数据库和开启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 | +---------------------------------+---------------------------------------+ 6 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; 2 *************************** 1. row *************************** 3 File: mysql-bin.000001 4 Position: 4666 5 Binlog_Do_DB: 6 Binlog_Ignore_DB: 7 Executed_Gtid_Set: 8 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

 /usr/local/mysqlbin/mysqlbinlog  mysql-bin.000008 mysql-bin.000009 > /tmp/test2.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)
复制代码


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM