作为开发,你最怕的是什么?是不是误删库,跑吧也不是,不跑吧,咱们也赔不起。为了防止遇见这种事情发生,那么我学了一个上午,终于知道如何利用binlog恢复误删数据了。不过,为了更加安全,我们也要及时做数据库备份。
下面正式开始!
1.首先我们要看一下我们的mysql数据库是否开启了binlog,在数据库里面输入:
show variables like '%log_bin%'
因为我已经开启了binlog,所以显示的是On,如果你没有开启binlog,那么在这块你展示的是OFF
2.这时候我们去服务器上面找一下配置
查看配置在哪
whereis my.cnf
我的是在/etc目录下,下面打开它:
按照上面binlog红框框里面来添加binlog配置。
3.重启mysql
service mysqld restart
4.这时候再执行 show variables like '%log_bin%' 如果是on,就证明你开启了binlog
这个时候,去/var/lib/mysql下面你就会发现多了两个东东
这个mysql-bin.index是二进制文件,咱们也看不懂,咱们主要关注后面带着好几个0的这个。
下面我来介绍一下基本的binlog命令
1查看所有binlog日志文件列表 :show master logs;
2查看最后一个binlog日志的编号名称及其最后一个操作事件pos结束点的值:show master status;
3.Flush logs 刷新日志,此刻开始产生一个新编号的binlog文件(当你选择要恢复数据的时候,一定要执行一次这个。)
4.清空所有binlog日志命令:reset master !!!(没事别执行这个,如果执行了,你就收拾收拾东西,另找高人吧。)
5 查看在binlog里面都执行过什么操作 :show binlog events in 'mysql-bin.000001';
6.指定查询,比如从pos点406开始查询,show binlog events in 'mysql-bin.000001' from 406
会这些应该就差不多了...
下面就是最关键的如何数据恢复了!!!
执行一下上面的第五步,我们来看看我们那些误操作!
图中红线里面就是我们做过的操作,那么我们怎么恢复数据呢?
就拿删除举个例子吧
看见我删除那一行了吧,咱们单单的拿出来
就这三行。begin 和Commit就不用我说了吧, 事务嘛,对不对! 我们主要关注的是第二列和第四列 第二列是pos开始的点,第四列是pos结束的点,我么就先拿着两个点讲一讲
那么我们想要恢复这个数据怎么做呢 还要讲些语句啊
mysqlbinlog 一些参数如下 这里我使用 --start-position 和 stop-position来做操作
--database ##与"-d"作用相同,用于指定数据
-d ##与“database”作用相同,用于指定数据库
--start-datetime ##起始时间点
--stop-datetime ##结束时间点
--start-position ##起始位置
--stop-position ##结束位置
注意: 如果只是指定了--start-position 那他会从start-position到这个文件结束
如果只是指定了--stop-position 那他会从问价开始到stop-position
上面删除的结束点是1788,那么我要把这个数据补回来
|
这时候你要问了,我不想从头执行到这个点
那么我们就要加上开始的点
mysqlbinlog mysql-bin.000001 --start-position=746 --stop-position=1788 | mysql -uroot -proot
这个就是从746 执行到1788点。
好啦,去看看你的数据库吧,应该是回来了呢!