微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL数据库中怎么恢复误删除数据

本篇文章为大家展示了MySQL数据库中怎么恢复误删除数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1. 找到binlog

恢复数据的前提是必须开启MysqLbinlog日志,如果binlog日志没开启,请忽略此篇文档。binlog日志是否开启可以查看MysqL配置文件。日志位置一般在/var/lib/MysqL目录或者编译安装的date目录下。也可登录MysqL用命令查看。

# cat /etc/my.cnflog_bin=MysqL-bin# MysqL -uroot -pEnter password: MysqL> show variables like'log_bin%'; +---------------------------------+--------------------------------------------------+ | Variable_name                   | Value                                            | +---------------------------------+--------------------------------------------------+ | log_bin                         | ON                                               | | log_bin_basename                | /home/programs/mysql-5.6.26/data/MysqL-bin       | | log_bin_index                   | /home/programs/mysql-5.6.26/data/MysqL-bin.index | | log_bin_trust_function_creators | OFF                                              | | log_bin_use_v1_row_events       | OFF                                              | +---------------------------------+--------------------------------------------------+ 5 rows in set (0.00 sec)# ll /home/programs/mysql-5.6.26/data/MysqL-bin*-rw-rw---- 1 MysqL MysqL 343629748 Oct 13 22:09 /home/programs/mysql-5.6.26/data/MysqL-bin.000001 -rw-rw---- 1 MysqL MysqL        19 Sep 23 17:11 /home/programs/mysql-5.6.26/data/MysqL-bin.index

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

MysqL> show master status; +------------------+-----------+--------------+------------------+-------------------+ | File             | Position  | binlog_Do_DB | binlog_Ignore_DB | Executed_Gtid_Set | +------------------+-----------+--------------+------------------+-------------------+ | MysqL-bin.000001 | 343629748 |              |                  |                   | +------------------+-----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)  MysqL> flush logs; Query OK, 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/stack/data.sql

上面命令中用-d ids指定要恢复数据库,如果要恢复表级别的数据,导出成sql后再进行过滤grep即可。

# more data.sql | grep --ignore-case -E 'insert|update|delete' | grep table

4. 恢复到数据库

恢复数据时,可能会有重复数据的报错,建议用-f参数忽略。

MysqL -uroot -p -f ids < data.sql

上述内容就是MysqL数据库中怎么恢复误删除数据,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程之家行业资讯频道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐