当前位置: 首页>数据库>正文

centos 通过binlog恢复数据库 如何用binlog恢复数据

作为开发,你最怕的是什么?是不是误删库,跑吧也不是,不跑吧,咱们也赔不起。为了防止遇见这种事情发生,那么我学了一个上午,终于知道如何利用binlog恢复误删数据了。不过,为了更加安全,我们也要及时做数据库备份。

下面正式开始!

1.首先我们要看一下我们的mysql数据库是否开启了binlog,在数据库里面输入:

show variables like '%log_bin%'

centos 通过binlog恢复数据库 如何用binlog恢复数据,centos 通过binlog恢复数据库 如何用binlog恢复数据_数据库,第1张

因为我已经开启了binlog,所以显示的是On,如果你没有开启binlog,那么在这块你展示的是OFF

2.这时候我们去服务器上面找一下配置

查看配置在哪

whereis my.cnf

centos 通过binlog恢复数据库 如何用binlog恢复数据,centos 通过binlog恢复数据库 如何用binlog恢复数据_mysql_02,第2张

我的是在/etc目录下,下面打开它:

centos 通过binlog恢复数据库 如何用binlog恢复数据,centos 通过binlog恢复数据库 如何用binlog恢复数据_mysql_03,第3张

按照上面binlog红框框里面来添加binlog配置。

3.重启mysql

service mysqld restart

4.这时候再执行 show variables like '%log_bin%' 如果是on,就证明你开启了binlog

这个时候,去/var/lib/mysql下面你就会发现多了两个东东

centos 通过binlog恢复数据库 如何用binlog恢复数据,centos 通过binlog恢复数据库 如何用binlog恢复数据_数据_04,第4张

这个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

会这些应该就差不多了...

下面就是最关键的如何数据恢复了!!!

执行一下上面的第五步,我们来看看我们那些误操作!

centos 通过binlog恢复数据库 如何用binlog恢复数据,centos 通过binlog恢复数据库 如何用binlog恢复数据_数据库_05,第5张

图中红线里面就是我们做过的操作,那么我们怎么恢复数据呢?

就拿删除举个例子吧

看见我删除那一行了吧,咱们单单的拿出来

centos 通过binlog恢复数据库 如何用binlog恢复数据,centos 通过binlog恢复数据库 如何用binlog恢复数据_mysql_06,第6张

就这三行。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 --stop-position=1788 | mysql -uroot -proot

这时候你要问了,我不想从头执行到这个点

那么我们就要加上开始的点

mysqlbinlog mysql-bin.000001 --start-position=746 --stop-position=1788 | mysql -uroot -proot

这个就是从746 执行到1788点。

好啦,去看看你的数据库吧,应该是回来了呢!


https://www.xamrdz.com/database/6y91939637.html

相关文章: