mysql 通过bin-log恢复数据方法详解

今天看了同事不小心删除了mysql数据库中的用户表。还好有打开mysql的bin-log记录了日志,这样就可以通过日志来还原之前备份的数据。具体的操作是通过mysqlbinlog这个指令来完成的

 代码如下 复制代码
 /mysql/bin/mysqlbinlog --database=fox --start-date="2013-01-22 5:00:00"  --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f

具体的参数看下名字就能明白

database:指定具体的数据库
start-date:开始时间
stop-date:结束时间
/mysql/data/mysql-bin.000001:

指定的日志文件

如果你没有备份数据的话,你就必须通过日志文件一个一个还原,记得顺序不能乱。如果你没有备份数据,日志又被部分删除的话,那么就悲剧了。因此,还原只是一种方法,最重要的还是定期备份数据。只要备份数据在,日志文件在,东西都可以解决。
同时记录一些操作日志的方法
查看所有日志:

 代码如下 复制代码

show master logs;

当前使用的binlog文件

 代码如下 复制代码
show binlog events g;

产生一个新的binlog日志文件

 代码如下 复制代码

flush logs;

删除所有二进制日志,并从新开始记录

 代码如下 复制代码

flush logs; 
reset master;

这里突然有一种想法,是否每次备份完数据以后就把之前的日志清理下,这样一旦发生问题,就可以从最近的日志开始还原。这个只是我的一种想法,有什么问题请指正。
同时大家如果希望不在错误操作delete这个可以在mysql启动的时候加入-U这个参数
启动MySQL的时候加上参数 -U

-U, –safe-updates Only allow UPDATE and DELETE that uses keys.

他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行。

一次完整的Mysqlbin-log日志恢复过程实例

1).创建一个表:

 代码如下 复制代码

mysql>usetest;

mysql>createtable t1(id int);

mysql>showtables;

 

2).添加两行数据:

 代码如下 复制代码

mysql>insertinto t1 values(1);

mysql>insertinto t1 values(2);

mysql>select *from t1;

 

3).备份现有数据(09:30):

 代码如下 复制代码

#mysqldump -uroot-p123456 test -l -F > /tmp/test.sql

 

4).在备份完后再添加三行数据(记录):

 代码如下 复制代码

mysql>insertinto t1 values(3);

mysql>insertinto t1 values(4);

mysql>insertinto t1 values(5);

 

5).此时突然数据库损损坏或者认为删除:

 代码如下 复制代码

mysql>droptable t1;

 

6).用已备份的test.sql来恢复数据库:

 代码如下 复制代码

#mysql -uroot-p123456 test < test.sql

 

7).从bin-log日志恢复:

 代码如下 复制代码

#/usr/local/mysql/bin/mysqlbinlog–no-defaults mysql-bin.000006|more//查看bin-log日志,在我的虚力机上bin-log日志从mysql-bin.000005开始

#/usr/local/mysql/bin/mysqlbinlog--no-defaults --stop-position=”272” mysql-bin.000006 |/usr/local/mysql/bin/mysql -uroot -p123456 //恢复bin-log日志

如果你没有开启bin日志我们可参考正同方法开启

一、 Mysqlbin-log 日志

1.开启Mysqlbin-log 日志

#vi/etc/my.cnf

 代码如下 复制代码

[client]

#password =your_password

port =3306

socket =/tmp/mysql.sock

default-character-set-utf8

.......

[mysqld]

port= 3306

socket= /var/lib/mysql/mysql.sock

log-slow-queries=mysql-slowlog

log-error=mysql.err

log=mysql.log

log-bin=mysql-bin//删除#符号

 2.查看二进制文件(mysql-bin.******)

 代码如下 复制代码

#cd/usr/local/mysql/bin/ && ls

 3.查看mysqbinlog日志是否开启

 代码如下 复制代码

mysql>showvariables like “%log-bin%;

 4.与Mysqlbin-log有关的日志操作

 代码如下 复制代码

mysql>flushlogs;//此时就会多一个最新的bin-log日志

mysql>showmaster status;//查看最后一个bin日志

mysql>resetmaster;//清空所有的bin-log日志

mysql>mysqlbinlog–no-defaults mysql-bin.******|more//查看bin-log日志

时间: 2024-12-03 08:26:45

mysql 通过bin-log恢复数据方法详解的相关文章

MySQL解决SQL注入的另类方法详解_Mysql

本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: select * from T where f1 = '{value1}' and f2 = {value2} 现在我们需要根据用户输入值填充该语句: value1=hello value2=5 我们得到了下面的 SQL 语句,我们再提交给数据库: select * from T where f1='h

MYSQL数据库的导出和导入方法详解

方法一 SQL脚本形式 操作步骤如下: 2.1. 导出SQL脚本 在原数据库服务器上,可以用phpMyAdmin工具,或者mysqldump(mysqldump命令位于mysql/bin/目录中)命令行,导出SQL脚本. 2.1.1 用phpMyAdmin工具 导出选项中,选择导出"结构"和"数据",不要添加"Drop DATABASE"和"Drop TABLE"选项. 选中"另存为文件"选项,如果数据比较

windows环境中mysql忘记root密码的解决方法详解_Mysql

一朋友告急:mysql 忘记root密码了 让我帮忙给看看,因为没有接触过mysql 所以从网上找了一下信息经我亲身实践  已经成功!mysql版本是5.1.以下是从网上找的mysql密码修改的信息:参考文章:windows下重置Mysql Root密码的方法mysql修改密码以及忘记密码1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令:net stop mysql 打开第一个cmd1窗口,切换到mysql的bin目录,运行命令:mysqld --de

PHP+mysql+ajax轻量级聊天室实现方法详解_php技巧

本文实例讲述了PHP+mysql+ajax轻量级聊天室实现方法.分享给大家供大家参考,具体如下: 做了一个QQ聊天交友网站,想加个聊天的功能,于是做完用PHP做了简单又强大的聊天室 1. 创建mysql数据库表: 复制代码 代码如下: create table chat( id bigint AUTO_INCREMENT,username varchar(20), chatdate datetime,msg varchar(500), primary key(id)); 2.编写建议连接数据库函

Zend Framework处理Json数据方法详解

本文实例讲述了Zend Framework处理Json数据的方法.分享给大家供大家参考,具体如下: JSON分隔符及意义 {}    用于实现对象的包含,对象都包含在大括号中 ,    逗号用于分隔对象的不同属性,或者数组的元素 []    用于存放数组,数组将存放在中括号中 :    用于表示键/值对的值,冒号前为键,冒号后为该键的值 JSON示例 { "addressbook":{ "name":"Mary Lebow", "add

jquery ajax解析XML文件数据方法详解

第一种方案:  代码如下 复制代码 <script type="text/javascript"> $(document).ready(function() {  $.ajax({     url: '/cgi/test.xml',     dataType: 'xml',     success: function(data){      //console.log(data);     $(data).find("channel").find(&qu

MySql实现跨表查询的方法详解_Mysql

复制代码 代码如下: SELECT c.id, c.order_id, c.title, c.content, c.create_time, o.last_pic FROM `orders` o , `case` c WHERE c.order_id = o.order_id ORDER BY c.id DESC LIMIT 15; 关于跨表提取字段的方法!利用order_id相同字段,提取case中的id,order_id,title,content,create_time:orders表中的

mysql UNIQUE索引的使用方法详解

mysql教程 UNIQUE索引的使用方法详解 语法: UNIQUE KEY `test` (`xref_key`,`xref_dbname`) UNIQUE KEY `xref_key` (`xref_key`,`xref_dbname`)        上述语法检查xref_key与xref_dbname的组合是否是唯一值,可以设定多个字段的组 合.其中,test是索引表中的字段名称.         该方法适合用来解决多个字段相互依赖,且必须满足唯一性的条件的情况.在经常 新增或删除资料表

Android通过json向MySQL中读写数据的方法详解【读取篇】_Android

本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");