mysql表误删回复_Mysql误删表中数据与误删表的恢复方法

参考:https://www.jb51.net/article/109664.htm

由于头两天面试时被问了这样一个问题,如果某同事误删了某个表,你该怎么恢复?

当时想了一下,因为博主没有遇到过这个问题,但是也多少了解一些,所以就回答通过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 |

+---------------------------------+---------------------------------------+

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

编辑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进行恢复

恢复过程中禁止在对数据库进行任何操作

数据库乃是企业的重中之重,备份一定要做的,也不要觉得有了备份就万无一失了,定期要恢复备份文件查看备份文件与生产库数据是否同步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值