您的位置:首页 > 数据库 > MySQL

mysql使用logbin进行数据恢复

2015-05-21 14:46 281 查看
最近老大让我研究一下,mysql日志的问题,主要是前方把数据中的数据都给删除了。这对于测量来说后期会产生不小的影响,所以我在这里也奉献上我两个小时的研究,由于之前没有搞过太多与数据库挂钩的事情,现在来看,数据库本省还是挺强大的,当初设计的时候就考虑到这些日志备份和恢复的功能,对前辈表示崇高的敬意。

1.MySQL日志

从事开发工作的人都知道,我们程序时常会使用log日志管理,大点的公司还会有日志管理系统。对于数以百万级或者更大的日志来进行处理。日志的最大作用就是,可以记录日常操作以及操作所出现的异常。对异常的记录是尤为重要的,可以根据异常信息来研究问题的出现。

MySQL对日志的操作同样强大,可以分为:
二进制binl-log日志,错误日志,SQL执行日志等。bin-log日志,是针对所有SQL操作以二进制的形式进行保存。错误日志;主要针对服务启动,运行,关闭中产生的错误信息的记录。
使用最多的就是通过二进制日志log-bin来备份数据库数据,恢复数据库数据。

2.数据备份和恢复

2.1log-bin的开启和关闭

要使用log-bin,那就必须先确保log-bin的开启。
1.查看log-bin日志的开启状态
我是用的是DOS操作,首先window+R,呼出运行,输入cmd,进入DOS页面,输入指令 mysql -uroot -pmypwd,切到数据库操作



2.输入  show variables like "%log_bin%"; 



ON表示开启,OFF表示关闭,也可以使用show variables like "%log_%";  来查看所有的日志信息。

3.如果你的log_bin 是关闭的,那么需要在mysql目录下my.ini 来修改一下。配置一下就可以了,当然你也可以设置一下它的输出路径。

如果你跟我配置的一样都是使用自定义路径,那么一定要确保该路径存在,否则会无法正常启动mysql。配置完事,重新启动一下mysql就行了。你可以通过命令行  service restart  mysql   也可以window+R  输入services.msc 来呼出服务,在服务里面重新启动一下mysql,也是可以的、
 
<span style="font-size:18px;">[mysqld]
#log="E:/mysqllog/mysql.log"
log-bin="E:/mysqllog/"
#log-bin=mysql-bin
# The TCP/IP Port the MySQL Server will listen on
port=3306</span>


好了配置完事就可以操作数据库,来尝试一下,数据库的备份和恢复了。

2.2 数据库回复

程序中的操作,对数据库进行增删改都会产生日志记录。如果你程序中使用flush或者像我在命令行输入flush  logs; 那么会另外产生一个日志文件去记录flush之后的一些数据库操作。当然,我这里为了省事,就不用flush来操作,让所有的操作语句都输出到同一个文件中。这样方面我的回复操作。

首先我们备份的文件都是这样这么命名的mysql.000001或者mysql-logbin.000001这种,打开文件一看,完全看不懂,就能看到数据的操作SQL语句



这时我们需要将这些东西转为txt,方便我们阅读:

同样的操作,window+R输入cmd,切换mysql中bin所在目录



然后输入指令



这里注意一点,这里有可能会出现一个问题,输入这条语句之后,报了个错:mysqlbinlog unkown variables :default-character-set=utf8
那么你需要将my.ini中对于client中的编码格式注掉或者删除。

这样就可以看到txt文件了,打开text文件之后,就可以看到我们刚才的删除SQL。你可以根据时间进行恢复,也可以根据行号进行恢复。当然这里面最显眼的就应该是时间了。



你再打开数据库,查看一下就会发现数据库中的数据已经恢复到删除前的数据了。
这就是一个简单的数据库恢复工作,其实还蛮简单的,期间碰到几个问题:

1.修改my.ini文件,mysql启动失败,原因是找不到指定的文件夹
2.将备份文件转为txt时,编码错误,需要将【client】下设置的编码格式注掉或者删除
3.就是对于mysql和dos界面的切换以及指令的不熟悉了。多用几次就好了。

附:
1,怎么开启关闭日志?
答:在mys.ini中【mysqld】配置日志(比如bin-log)log-bin="E:/mysqllog/"
即可开启bin-log日志,注释掉日志配置即可关闭。需要重新启动mysql服务。
2,开启后日志的位置?
默认是在mysql下的data文件中,但是我是没找到。我使用的是配置路径,在路径下可以看到生成的mysql.000001等文件
3.日志记录何种内容?
根据日志类型的不同记录不同的内容,比如错误日志记录的就是服务开启,运行关闭过程中出现的错误信息。
bin-log日志记录的是对数据库的操作,比如增删改等。
bin-log中会有执行该SQL的时间以及对应的行数以及对SQL执行的说明信息。
4.如何查看日志信息?
通过指令将备份文件转为txt文件,打开txt文件就可查看。
指令;mysqlbinlog .exe --no-defaults --database=ecard  E:/mysqllog/mysql.000001 >E:/mysqllog/1.txt
5.如何进行数据库数据恢复?
通过备份的旧数据和binlog日志进行恢复。
导入旧的备份数据
找到误操作的时间或者行数,使用指令来恢复到该时间点或者行数之前的数据。
指令:mysqlbinlog --stop-date="2015-05-21 13:12:12"  E:/mysqllog/mysql.000001 | mysql -uroot -p123qwe
6.数据恢复的步骤
a.查看是否配置log-bin
b.将log-bin日志转为txt文件查看,误操作时间等
c.根据误操作的时间进行数据恢复
     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息