zoukankan      html  css  js  c++  java
  • 恢复mysql数据库误删数据

    前言

    某一天,天朗气清;突然传来消息:数据库被删库了!这简直不亚于8级大地震呀;一找原因,服务器宕机造成了数据库数据丢失。于是,通过日志恢复数据的救援开始了。
    

    正文

    在数据库开启binlog功能

    找到/etc/my.cnf并编辑(没有my.cnf的时候就找my.ini);添加
     log-bin=mysql-bin 
     expire_logs_days=7(日志保留天数)
    然后重启mysql
    

    注意:log_bin是生成的bin-log的文件名,后缀则是6位数字的自增编码,从000001开始:

    mysql_bin.000001 
    mysql_bin.000002 
    ...... 
    

    操作日志

    1、查看日志文件:
    mysql> show master logs;
    +------------------+--------------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 | 120 |
    | mysql-bin.000002 | 4249 |
    | mysql-bin.000003 | 1110 |
    +------------------+--------------+
    
    2、查看最后一个binlog日志的编号名称(就是最后一个操作事件的值):
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000003 |      1110 | | | |
    +------------------+----------+--------------+------------------+-------------------+
    
    3、产生一个新的日志文件
    mysql> flush logs; 
    Query OK, 0 rows affected (0.01 sec)
    mysql> show master status;
    +--------------+---------------+
    |  Log_name   | File_size |
    +--------------+---------------+
    | mysql-bin.000004 |      106 |
    +-----------------+------------+
    4 rows in set (0.01 sec)
    
    4、删除所有binlog日志,重新记录
    mysql> reset master;
    Query OK, 0 rows affected (0.01 sec)
    mysql> show master status;
    +--------------+---------------+
    |  Log_name   | File_size |
    +--------------+---------------+
    | mysql-bin.000001 |      106 |
    +-----------------+------------+
    1 rows in set (0.01 sec)
    

    恢复数据

    恢复数据的方式有很多种,可以根据自己具体的情况来选择用哪种。

    1、如果想全部恢复,先执行之前的备份恢复,再执行自备份后产生的二进制日志文件
        mysql localhost mysql-bin.000001 | mysql -uroot -p( 这样数据库就可以恢复到删除数据前的状态)
    
    2、根据时间点来恢复,如果确认被删的时间点为2019-03-25 09:00:00,那么就可以如下
         mysqlbinlog --stop-date='2019-03-25 8:59:59' mysql-bin.000001 | mysql -uroot -p  然后跳过数据被删的时间点,继续执行后面的binlog  # mysqlbinlog --start-date='2019-03-25 09:01:00' mysql-bin.000001 | mysql -uroot -p  
         其中--stop-date='2019-03-25 08:59:59' 和--start-date='2019-03-25 09:01:00' 
    
    3、如果知道两个时间点,就按如下操作
       mysqlbinlog --start-datetime="2019-03-25 10:30:30" --stop-datetime="2019-03-25 11:10:10" mysql-bin.000001 | mysql -u root -p
    
    4、通过查看日志文件信息确认(假如操作点为6200-6300)
        mysqlbinlog --stop-position=6200 mysql-bin.000001 | mysql -uroot -p 
        mysqlbinlog --start-position=6300 mysql-bin.000001 | mysql -uroot -p
    
    

    注意

    因为mysql的binlog是二进制文件,一定要用mysqlbinlog命令才可以操作。

    > 举例,导出sql文件:# mysqlbinlog  mysql-bin.000001 >test.sql 
    

    后续

    通过这一次经历,知道了以后一定要做好数据库的备份;这很重要!

  • 相关阅读:
    dp第三题
    近期(2012/5/15)
    HTML5 地理位置定位(HTML5 Geolocation)原理及应用【转】
    xml 中如何正确使用 & 符号
    Python进阶07 函数对象【转】
    Android 快捷小工具
    解决数据库乱码问题【转】
    Android APK反编译详解(附图)
    字符串转日期【20080808080808】
    HTML+5+从入门到精通
  • 原文地址:https://www.cnblogs.com/nikeodong/p/10615058.html
Copyright © 2011-2022 走看看