假如我在2018-6-10日给数据库做了一次备份,但是在2018-7-3日数据库操作失误,造成了误删或者其他操作,我需要将数据恢复到2018-7-3日的数据,那么即可运用2018-6-10日备份的数据+binlog日志实现数据恢复。(其中binlog恢复的是2018-6-10日-2018-7-3日的数据)
首先确定你的服务器已开启binlog日志,开通、查看教程请自行百度。
windows版本的mysql的binlog日志一般在data这个目录下,其中mysql-bin.index这个文件相当于索引文件,而其他的00000x则是记录了除了select查询语句以外的sql语句。
为了知道我要从哪里开始恢复,哪里结束恢复,我们需要查看mysql-bin.00000x这些文件,在mysql命令下执行:show binlog events in 'mysql-bin.000001';,即可查看到mysql-bin.000001这个文件的内容,但是通常文件都会很大,我们直接这样查看的话比较慢,也不好观察。所以我们需要将他转成txt文件进行查看,在mysql的bin目录下执行cmd(不是mysql命令终端下):mysqlbinlog mysql-bin.000001 > d:/1.txt,即可将内容写到D盘的1.txt中,但是但是这些都是二进制的文件,所以windows下无法查看,打开1.txt会发现乱码。
则我们需要将他转成普通文件进行查看,具体是在mysqlbinlog命令中增加参数,mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 > d:/1.txt 这样即可解决乱码问题。
然后我们打开txt文件,查找出现问题的地方,并且找到需要恢复到的地方。
上面这种办法读取出binlog日志的全文内容较多,不容易分辨查看pos点信息,这里介绍一种更为方便的查询命令:
mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
选项解析:
IN 'log_name' 指定要查询的binlog文件名(不指定就是第一个binlog文件)