前言

某一天,天朗气清;突然传来消息:数据库被删库了!这简直不亚于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

后续

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

恢复mysql数据库误删数据的更多相关文章

  1. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

  2. 烂泥:通过binlog恢复mysql数据库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识.这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库. 在使用bin ...

  3. MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库【转载】

    转自 MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库 - _安静 - 博客园http://www.cnblogs.com/xionghui/archive/2012/ ...

  4. 电脑重装系统后如何恢复Mysql数据库

    电脑重装系统后如何恢复Mysql数据库 一.[设置mysql的path]

  5. CentOS6 更改Mysql数据库的数据存放位置

    mysql使用yum安装时,默认的数据是存储在/var/lib/mysql下.一般情况下,为了数据的安全性,建议将mysql数据库的数据文件存储在系统的第二块磁盘上的目录下可以按照以下步骤进行操作: ...

  6. mysql数据库delete数据时不支持表别名

    今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4 ...

  7. 转】mysql数据库delete数据时不支持表别名

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4012853.html 感谢! 今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELE ...

  8. SQLServer数据库误删数据找回

    记一次SQLServer数据库误删数据找回 昨天 同事在本机清理数据库表时,连接到了生产机,误删了二十几张表,幸好是晚上加班的时候删除的,生产机上当时是一天一备份,还原备份是最后的策略,最关键的还是要 ...

  9. 使用python将mysql数据库的数据转换为json数据

    由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...

随机推荐

  1. 解决问题Can’t connect to local MySQL server through socket

    不幸遇到MySQL出现ERROR 2002 (HY000): Can’t connect to local mysql server through socket ‘/tmp/mysql.sock’错 ...

  2. Android通过php插入查询SQL数据库

    PHP代码 <?php header("Content-type: text/html; charset=gb2312"); $serverName = "loca ...

  3. Centos 7 下搭建 Dokuwiki

    Centos 7 下搭建 Dokuwiki # Dokuwiki 是php的,所以要先搭建php环境,下载 apache和php,第1.2步下载完,相关的依赖都会下载## 1.下载 httpdyum ...

  4. 【leetcode 简单】第二十题 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...

  5. NYOJ 1063 生活的烦恼 (二叉树)

    题目链接 描述 生活的暑假刚集训开始,他要决心学好字典树,二叉树,线段树和各种树,但生活在OJ上刷题的时候就遇到了一个特别烦恼的问题.那当然就是他最喜欢的二二叉树咯!题目是这样的:给你一颗非空的二叉树 ...

  6. Oracle解锁scott账户

    Oracle安装完成之后scott账户默认是锁定的,登录的时候会提示账户已经被锁定: C:\Users\CC11001100>sqlplus scott/toor SQL*Plus: Relea ...

  7. Python3中的SocketServer

    socket并不能多并发,只能支持一个用户,socketserver 简化了编写网络服务程序的任务,socketserver是socket的在封装.socketserver在python2中为Sock ...

  8. win8扁平风格的物流公司网站后台管理模板——后台

    链接:http://pan.baidu.com/s/1o79Zp2M 密码:tqrz

  9. perl6正则 2: 字母,数字,空格,下划线, 字符集

    数字, 字母, 下划线 在perl6中, 如果是 数字, 字母, 下划线, 在正则里可以正接写上. > so / True > so 'perl6_' ~~ /_/ True > 非 ...

  10. python之自然语言处理入门(一)

    前言 NTLK是著名的Python自然语言处理工具包,记录一下学习NTLK的总结. 安装nltk pip install nltk # 测试 import nltk 安装相关的包 import nlt ...