详解:如何恢复MySQL数据库下误删的数据

  


马哥Linux运维罗宾

血的教训,事发经过就不详述了。直接上操作步骤及恢复思路(友情提示:<强>数据库的任何操作都要提前做好备份),以下是Mysql数据后的恢复过程:

1。找到binlog

恢复数据的前提是必须开启Mysql的binlog日志,如果binlog日志没开启,请忽略此篇文档.binlog日志是否开启可以查看Mysql配置文件。日志位置一般在<代码>/var/lib/Mysql> 日期目录下。也可登录Mysql用命令查看。

 #, cat /etc/my.cnflog_bin=mysql-bin #, mysql  -uroot  -pEnter 密码:
  mysql>, show  variables 像'log_bin %’;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |,Variable_name ,,,,,,,,,,,,,,,,,, |, Value ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |,log_bin ,,,,,,,,,,,,,,,,,,,,,,,, |,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
  |,log_bin_basename ,,,,,,,,,,,,,,, |,/home/程序/mysql-5.6.26/数据/mysql-bin ,,,,, |
  |,log_bin_index ,,,,,,,,,,,,,,,,,, |,/home/程序/mysql-5.6.26/数据/mysql-bin.index  |
  | |,log_bin_trust_function_creators  OFF ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
  |,log_bin_use_v1_row_events ,,,,,, |, OFF ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  5,rows  set 拷贝;(0.00,sec) #, ll /home/程序/mysql-5.6.26/数据/mysql-bin * -rw-rw——, 1, mysql  mysql  343629748, Oct  13, 22:09 /home/程序/mysql-5.6.26/数据/mysql-bin.000001
  -rw-rw——, 1, mysql  mysql ,,,,,,, 19, Sep  23, 17:11 /home/程序/mysql-5.6.26/数据/mysql-bin。指数

,

如果有多个binlog日志也可以在Mysql命令行下查看当前binlog,切割binlog日志。切割完成binlog再次查看就会看到新的日志写入到新的binlog文件中。

 mysql>, show  master 地位;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + |,File ,,,,,,,,,,,, |, Position , |, Binlog_Do_DB  |, Binlog_Ignore_DB  | Executed_Gtid_Set  |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + |,mysql-bin.000001  |, 343629748, |,,,,,,,,,,,,,, |,,,,,,,,,,,,,,,,,, |,,,,,,,,,,,,,,,,,, |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + 1,row  set 拷贝(0.00,秒)
  
  mysql>, flush 原木;
  Query 好吧,,0,rows  affected  (0.01, sec) 

,

2。找到binlog中错误的语句

可以binlog日志中找到错误语句执行的时间点,分别恢复错误语句前后的binlog日志为sql。也可以跳过此步,直接恢复整个binlog日志为sql,然后打开sql文件,删除错误语句。

 #, sudo  mysqlbinlog ——base64-output=DECODE-ROWS  -v  -d  ids  mysql-bin.000001  |, grep ——ignore-case  -A3  -B4 “错误的sql语句”

,

3。恢复binlog日志

通过<代码> mysqlbinlog 命令直接恢复binlog日志为sql脚本,可以指定开始和结束时间。如果从上次备份(建议备份的同时刷新binlog日志)截至到恢复时间产生多个binlog日志,按从小到大的顺序分别导出成sql再顺序导入到数据库。

 #, sudo  mysqlbinlog ——base64-output=DECODE-ROWS  -v  -d  ids ——start-datetime “2016 - 10 - 11, 15:22:53’, mysql-bin.000001 在/home/栈/数据。null

详解:如何恢复MySQL数据库下误删的数据