zoukankan      html  css  js  c++  java
  • 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 | +---------------------------------+---------------------------------------+ 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 statusG; 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进行恢复

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

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

  • 相关阅读:
    gvim在windows下的一些小技巧
    解决eclipse在ubuntu下无法找到jdk方法
    ubuntu 12.04 下安装wireshark
    使用坚果云同步数据
    Windows WMIC命令详解 (Windows Management Instrumentation Commandline)
    ubuntu 12.04 配置指南
    CHROME自定义样式扩展 —— STYLISH
    地漏
    卫生间装修,想要坐便改成蹲便,地面需要加高多少?
    不锈钢橱柜
  • 原文地址:https://www.cnblogs.com/tdskee/p/13271570.html
Copyright © 2011-2022 走看看