恢复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 

后续

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

原文地址:https://www.cnblogs.com/nikeodong/p/10615058.html

时间: 2024-08-05 13:31:47

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

xtrabackup 全备份,增量备份,恢复 mysql数据库

Xtrabackup使用指南 InnoDB数据备份工具 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写,也就是不加锁),是商业备份工具InnoDB Hotbackup的一个很好的替代品 一.Xtrabackup介绍  A.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具

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

昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所有的表通过show tables能看到,但是select的过程中却报“Table doesn't exist”. 于是,建议他试试可传输表空间. 同时,自己也测试了下,确实可行. 测试版本 MySQL 5.6.32 社区版 首先,创建测试数据 在这里创建两张表.之所以创建两张相同的表是为了方便后续的

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

本文首发于烂泥行天下. 在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识.这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库. 在使用binlog日志来恢复数据库之前,我们有一些前提工作需要做.步骤如下: 1.创建新的数据库ailanni 2.创建新的表ilannitable 3.向表ilannitable插入数据 4.刷新mysqlbin日志 5.完整备份ailanni数据库 6.删除表ilannitable插入的部分数据 7.删除数据库ailanni 8.

Qt中使用QProcess备份和恢复Mysql数据库

分类: Qt2011-02-18 21:35 1395人阅读 评论(3) 收藏 举报 qtmysql数据库windowspathcmd . 使用Qt做MySQL数据库开发,遇到需要备份.还原数据库的问题. MySQL中没有提供将数据库备份成.sql文件的SQL语句,而是提供了一个mysqldump.exe工具来完成这个功能. 没有SQL语句,QSqlQuery就用不成了,决定改用QProcess实现. . 但是在Qt中使用QProcess::execute()方法怎样都导不出数据来, 更郁闷的是

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

电脑重装系统后如何恢复Mysql数据库 一.[设置mysql的path] 比如:我的mysql在:D:\DataBase\mysql-5.7.13-winx64,可以在环境变量中重新新建一个环境变量Mysql_Home,变量值就是Mysql的安装目录 如图:   然后,在Path的变量值添加;%Mysql%\bin; ,如图:   二.[测试] Win+R,输入cmd,弹出命令行窗口,输入mysql admin –V,若出现如下信息,说明配置环境变量成功!   三.[改变basedir与data

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

今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4028812348f28b890148f29253a80000' 这条SQL语句放到Oracle数据库中去执行是可以正常执行的,但是放到MySQL数据库中执行时就出现了如下的错误: 1 [Err] 1064 - You have an error in your SQL syntax; check

MySQL数据库的数据文档

在MySQL数据库中,配置文档my.ini默认存放在C:/Program Files/MySQL/MySQL Server 5.5中,打开配置文档找出下面几行信息 #Path to installation directory. All paths are usually resolved relative to this.basedir="C:/Program Files/MySQL/MySQL Server 5.5/"    #数据库的安装路径 #Path to the datab

PHP从零单排(十三)使用PHP显示MySQL数据库的数据

1.在PHP执行SQL语句 要从数据库获得数据,首先PHP要执行一条对表操作的SQL语句,包括SELECT.INSERT.UPDATE或DELETE语句.一般情况下,在PHP中执行SELECT语句,会从表中查找出一些记录行.而执行其他语句,只会返回语句是否执行成功的信息. <?php $host='localhost'; $user_name='root'; $password='helloworld'; $conn=mysql_connect($host,$user_name,$passwor

备份恢复MySQL数据库的命令

备份恢复MySQL数据库的命令 备份:mysqldump -hhostname -P 3306 -uusername -ppassword databasename > D:/backupfile.sql 恢复:mysqldump -hhostname -P 3306 -uusername -ppassword databasename < D:/backupfile.sql