详解MySQL误操作后怎样进行数据恢复

一、开启binlog。

首先查看binlog是否开启

mysql> show variables like "log_bin";

+---------------+-------+

|Variable_name | Value

+---------------+-------+

| log_bin OFF

+---------------+-------+

1 row in set (0.00 sec)

值为OFF,需开启,开启binlog方式如下:

#vim /etc/my.cnf

在[mysqld]中加入

log-bin = mysql-bin

log-bin = /usr/local/mysql/log/mysql-bin.log

重启mysql服务

#service mysqld stop

#service mysqld start

二、模拟数据写入

建库

create database backup;

建表

CREATE TABLE `number` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',

`updatetime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

写入数据

程序2-1

#coding:utf8

#python2.7

import MySQLdb

import time

def connect_mysql(db_host="192.168.11.169",user="martin",passwd="martin",db="backup",charset="utf8"):

conn = MySQLdb.connect(host=db_host,user=user,passwd=passwd,db=db,charset=charset)

conn.autocommit(True)

return conn.cursor()

#数据插入

for i in range(0,10):

#time=time.strftime("%Y-%m-%d %H:%M:%S")

sql = 'insert into number(updatetime) values(%s)'

values = [(time.strftime("%Y-%m-%d %H:%M:%S"))]

db1 = connect_mysql()

print db1.executemany(sql,values)

查询数据

mysql> select * from number;

+-------+------------------------+

| id | updatetime

+--------------------------------+

| 1 | 2016-06-29 23:27:15 |

| 2 | 2016-06-29 23:27:15 |

| 3 | 2016-06-29 23:27:15 |

| 4 | 2016-06-29 23:27:15 |

| 5 | 2016-06-29 23:27:15 |

| 6 | 2016-06-29 23:27:15 |

| 7 | 2016-06-29 23:27:15 |

| 8 | 2016-06-29 23:27:15 |

| 9 | 2016-06-29 23:27:15 |

| 10 | 2016-06-29 23:27:15 |

+-------+------------------------+

10 rows in set (0.00 sec)

三、全量备份

mysqldump -uroot -p -F --master-data=2 backup |gzip> /martin/data/backup_$(date +%F).sql.gz

注:加-F能刷新binlog,方便恢复时操作。

四、模拟写入增量数据

继续执行程序2-1。

查询数据

mysql> select * from number;

+----+---------------------------+

| id | updatetime |

+----+---------------------------+

| 1 | 2016-06-29 23:27:15 |

| 2 | 2016-06-29 23:27:15 |

| 3 | 2016-06-29 23:27:15 |

| 4 | 2016-06-29 23:27:15 |

| 5 | 2016-06-29 23:27:15 |

| 6 | 2016-06-29 23:27:15 |

| 7 | 2016-06-29 23:27:15 |

| 8 | 2016-06-29 23:27:15 |

| 9 | 2016-06-29 23:27:15 |

| 10 | 2016-06-29 23:27:15 |

| 11 | 2016-06-29 23:31:03 |

| 12 | 2016-06-29 23:31:03 |

| 13 | 2016-06-29 23:31:03 |

| 14 | 2016-06-29 23:31:03 |

| 15 | 2016-06-29 23:31:03 |

| 16 | 2016-06-29 23:31:03 |

| 17 | 2016-06-29 23:31:03 |

| 18 | 2016-06-29 23:31:03 |

| 19 | 2016-06-29 23:31:03 |

| 20 | 2016-06-29 23:31:03 |

+-------+---------------------+

20 rows in set (0.00 sec)

五、增量备份

保留mysql-bin.000002及之后的binlog即可。

六、模拟误操作

delete from number;

七、再次写入增量数据

执行程序2-1

select * from bumber;

+------+------------------------+

| id | updatetime |

+------+------------------------+

| 21 | 2016-06-29 23:41:06 |

| 22 | 2016-06-29 23:41:06 |

| 23 | 2016-06-29 23:41:06 |

| 24 | 2016-06-29 23:41:06 |

| 25 | 2016-06-29 23:41:06 |

| 26 | 2016-06-29 23:41:06 |

| 27 | 2016-06-29 23:41:06 |

| 28 | 2016-06-29 23:41:06 |

| 29 | 2016-06-29 23:41:06 |

| 30 | 2016-06-29 23:41:06 |

+------+------------------------+

10 rows in set (0.00 sec)

八、恢复

此时发现之前的delete操作为误操作,急需恢复,恢复过程如下

给该表加上读锁

lock table number read;

将全量备份的数据导入

#cd /martin/data/

#gzip -d number_2016-06-29.sql.gz

#grep -i "change" *.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107;

刷新日志

#mysqladmin -uroot -p'martin' flush-logs

#cd /usr/local/mysql/log

#ls|grep mysql-bin|grep -v index

mysql-bin.000001

mysql-bin.000002

mysql-bin.000003

可确定mysql-bin.000002为增量数据binlog

导入全量备份

#cd /martin/data/

#mysql -uroot -p backup < number_2016-06-29.sql

#cp /usr/local/mysql/log/mysql-bin.000002 /martin/data/

#mysqlbinlog mysql-bin.000002 >bin.sql

#vim bin.sql

在bin.sql找到之前的delete语句,删除

mysql -uroot -p

九、确认已恢复数据

登录mysql

#mysql -uroot -p'martin' backup

select * from number;

+----+---------------------+

| id | updatetime |

+----+---------------------+

| 1 | 2016-06-29 23:27:15 |

| 2 | 2016-06-29 23:27:15 |

| 3 | 2016-06-29 23:27:15 |

| 4 | 2016-06-29 23:27:15 |

| 5 | 2016-06-29 23:27:15 |

| 6 | 2016-06-29 23:27:15 |

| 7 | 2016-06-29 23:27:15 |

| 8 | 2016-06-29 23:27:15 |

| 9 | 2016-06-29 23:27:15 |

| 10 | 2016-06-29 23:27:15 |

| 11 | 2016-06-29 23:31:03 |

| 12 | 2016-06-29 23:31:03 |

| 13 | 2016-06-29 23:31:03 |

| 14 | 2016-06-29 23:31:03 |

| 15 | 2016-06-29 23:31:03 |

| 16 | 2016-06-29 23:31:03 |

| 17 | 2016-06-29 23:31:03 |

| 18 | 2016-06-29 23:31:03 |

| 19 | 2016-06-29 23:31:03 |

| 20 | 2016-06-29 23:31:03 |

| 21 | 2016-06-29 23:41:06 |

| 22 | 2016-06-29 23:41:06 |

| 23 | 2016-06-29 23:41:06 |

| 24 | 2016-06-29 23:41:06 |

| 25 | 2016-06-29 23:41:06 |

| 26 | 2016-06-29 23:41:06 |

| 27 | 2016-06-29 23:41:06 |

| 28 | 2016-06-29 23:41:06 |

| 29 | 2016-06-29 23:41:06 |

| 30 | 2016-06-29 23:41:06 |

+----+---------------------+

30 rows in set (0.00 sec)

恢复完成!以上就是本文的全部内容,在操作数据库时候要多加小心尽量避免误操作,如果万一遇到了,希望本文能够帮助大家。相关阅读:

MySQL存储过程中的基本函数和触发器的相关学习教程

css 元素选择器的简单实例

Win10微软拼音输入法卸载不了?Win10微软拼音输入法删掉的方法

MongoDB数据库forEach循环遍历用法

win10系统如何打开虚拟键盘 win10虚拟键盘打开方法

Android实现图片反转、翻转、旋转、放大和缩小

jQuery中bind与live的用法及区别小结

64位win7旗舰版右下角音量小喇叭图标不见了怎么找回?

win10怎么隐藏工具栏右下角的图标?

Android ListView长按弹出菜单二种实现方式示例

win10/win7/win8.1十二月首个安全更新发布 修复14项重要bug

Win8系统无法开机电脑提示Invalid Partition Table的原因及解决方法

在Ubuntu 12.04中安装Gnome Shell扩展具体的方法

android获取当前运行Activity名字的方法

phpstudy mysql恢复数据_MySQL_详解MySQL误操作后怎样进行数据恢复,一、开启binlog。 首先查看binlo - phpStudy...相关推荐

  1. mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复

    一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +---------------+----- ...

  2. MySQL mysqldump数据导出详解

    MySQL mysqldump数据导出详解 2016-04-07 11:14  pursuer.chen  阅读(357122)  评论(2)  编辑  收藏  举报 介绍 在日常维护工作当中经常会需 ...

  3. mysql分区表truncate分区数据_详解MySQL分区表

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

  4. mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  5. mysql 事务 for update,mysql事务锁_详解mysql 锁表 for update

    摘要 腾兴网为您分享:详解mysql 锁表 for update,智慧农业,真还赚,悦读小说,学习帮等软件知识,以及电池管家,三国群英传3,userland,运满满货主版,王者荣耀,简单3d动画,嘉丽 ...

  6. mysql inner join where_详解mysql 使用left join添加where条件的问题分析

    当前需求: 有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表都有isDel逻辑删除标志. 最开始的错误写法一: SEL ...

  7. mysql sql组合_详解mysql 组合查询

    使用UNION 多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(uni ...

  8. mysql重做日志_详解MySQL 重做日志(redo log)与回滚日志(undo logo)

    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...

  9. java mysql 自动提交_详解MySQL与Spring的自动提交(autocommit)

    1 MySQL的autocommit设置 MySQL默认是开启自动提交的,即每一条DML(增删改)语句都会被作为一个单独的事务进行隐式提交.如果修改为关闭状态,则执行DML语句之后要手动提交 才能生效 ...

最新文章

  1. PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
  2. hadoop 安全模式
  3. mark一下总是记混的重定向与转发的区别
  4. NS2网络模拟(3)-吞吐率
  5. 推荐一个不到300k的Gif处理神器 - Gifsicle(免费下载)
  6. 操作系统 —— 磁盘
  7. 能用10块大洋去解决的事,千万不要用时间
  8. Qt之QFileSystemWatcher
  9. 【FileOutputStream类:文档中的换行与追加】
  10. Linux 网络编程 —— 套接字的介绍
  11. php选择不同店发送不同邮件,php – WooCommerce电子邮件通知:不同城市的不同电子邮件收件人...
  12. java nio为什么是非阻塞_Java nio都是非阻塞IO么?并非如此
  13. NDK 开发实战 - 微信公众号二维码检测
  14. windows IIS Web服务器 发布网站
  15. 最小的 中文 linux,麻雀虽小五脏俱全 最小Linux系统试用
  16. PgRGGmiCst
  17. 2022最新微信步数提交平台网站PHP源码
  18. EasyExcel的导入excel文件
  19. 点餐小程序原型模板-书亦烧仙草
  20. ZigZag Conversion(“Z”形转换)

热门文章

  1. api-ms-win-crt-runtime-l1-1-0.dll 丢失
  2. java开发工程师转正述职报告
  3. 【Y9000P 2022 GTX3060 CUDA安装记录】
  4. next主题搭建相册(无需安装插件,代码即可实现)
  5. Qt的长期支持版本的知识搜集
  6. 该怎么回答面试官问“你有什么优缺点?”
  7. STM32+PN532写UltraLight标签
  8. 华为服务器L型滑道安装步骤讲解
  9. 有哪些简单好用的国产数据库?
  10. 8888帅气图片网络红人打造第一期