宝塔mysql⼆进制恢复_宝塔数据库恢复⽅法:Mysql通过
binlog⽇志恢复数据
Binlog⽇志,即binary log,是⼆进制⽇志⽂件,有两个作⽤,⼀个是增量备份,另⼀个是主从复制,即主节点维护⼀个binlog⽇志⽂件,从节点从binlog中同步数据,也可以通过binlog⽇志来恢复数据
1,登录mysql查看binlog⽇志的状态,输⼊show variables like ‘%log_bin%’;查看binlog为off关闭状态
2,开启mysql binlog⽇志,进⼊mysql配置⽂件(vi /etc/myf)  在mysqld区域内添加如下内容,①server-id = 1(单个节点id) ②log-bin= /var/lib/mysql/mysql-bin(位置⼀般和mysql库⽂件所在位置⼀样) ③expire_logs_days = 10(表⽰此⽇志保存时间为10天),重启mysqld,再次查看binlog⽇志开启状态为ON
3,Binlog⽇志包括两类⽂件;第⼀个是⼆进制索引⽂件(后缀名为.index),第⼆个为⽇志⽂件(后缀名为.00000*),记录数据库所有的DDL和DML(除了查询语句select)语句事件
4,查看所有binlog⽇志⽂件列表:show master logs;
5,查看最后⼀个binlog⽇志的编号名称及其最后⼀个操作事件pos结束点的值:show master status;
6,Flush logs  刷新⽇志,此刻开始产⽣⼀个新编号的binlog⽂件,例如:
之前下过mysql现在重新下载mysql每当mysqld服务重启时,会⾃动执⾏刷新binlog⽇志命令,mysqldump备份数据时加-F选项也会刷新binlog⽇志
7,清空所有binlog⽇志命令:reset master;
8,查看binlog⽂件内容,使⽤查看⼯具mysqlbinlog来查看(cat/vi/more都是⽆法打开的)
9,上⾯的⽅法读取内容较多不易观察,以下命令更为⽅便查看命令:show binlog events in ‘mysql-bin.000003’;
10,指定查询,从pos点406开始查询,如下:
11,指定查询,从pos点154开始查询,中间跳过2⾏,查询4条数据,如图:
12,利⽤binlog⽇志恢复mysql数据,例如,现有⼀张数据表如图:此表位于hello数据库
现在将此数据库备份到本地(模拟每周的备份情况),备份命令如下
可以在数据备份之前或者之后执⾏flush logs重新⽣成⼀个binlog⽇志⽤来记录备份之后的所有增删改操作(重新⽣成⽇志更好pos点),由于业务需求,现在对表进⾏插⼊
数据,修改数据,如图新增了两条数据id 为5和6,修改后数据如图,
6的年龄修改成了30
13,由于操作失误,误删除了数据库,所有数据都不见了,此时可以通过binlog⽇志恢复数据,由于之前有做了数据库备份,所以可以先将备份的数据导⼊进去,剩下缺少的就是备份之后操作所产⽣的内容(备份之后执⾏了插⼊内容以及更改内容),先恢复备份的数据:创建库hello并选择库(use hello),通过命令source /root/hello.sql将数据库内容导⼊,然后执⾏
14,恢复的内容如下所⽰:
15,上⾯恢复的数据只是截⽌到备份时间的数据,剩下缺少的数据可以通过binlog⽇志来恢复,由于我们备份数据库之前重新创建了mysql-bin.000006⽇志,所以备份后的所有操作都保存在这个⽇志中,可以先备份下这个⽇志⽂件,cp mysql-bin.000006 /root/  接着执⾏flush logs 刷新⽇志,重新创建了⼀个binlog⽇志7
16,重新创建⼀个⽇志7的⽬的:接下来所有操作的数据都会写⼊到⽇志7中,⽇志6中不会在写⼊任何数据(⽅便根据⽇志6的内容恢复数据,因为⽇志6的数据就是备份之后到删库之前的所有操作⽇志,重建⽇志7不会有过多的数据影响恢复)
17,登录mysql 查看⽇志6:  show binlog events in ‘mysql-bin.000006’;结果如下:
查看⽇志发现,在备份数据后⾸先执⾏的是插⼊数据操作(在⼀个事务内),此时可以通过指定pos结束点恢复(部分恢复),如图,pos结束点位435(事务已提交表⽰结束),执⾏命令如下, /usr/bin/mysqlbinlog  –stop-position=435 –database=hello
/var/lib/mysql/mysql-bin.000006 | /usr/bin/mysql -uroot -p密码 -v hello (其中整个命令的含义是通过mysqlbinlog读取⽇志内容并通过管道传给mysql命令,-v表⽰执⾏此mysql命令)执⾏后查询表发现如下:
备份之后插⼊的数据都出现了,⽬前还差⼀次修改的数据没有回来,接着看⽇志6如图,
发现执⾏更新操作的事务区间为573到718,所以可以执⾏以下命令来恢复这段数据,/usr/bin/mysqlbinlog  –start-position=573 –stop-position=718 –database=hello  /var/lib/mysql/mysql-bin.000006 | /usr/bin/mysql -uroot -p密码 -v hello注意其中的符号都是英⽂状态下(只恢复这段事务区间的数据也就是更新的数据),恢复结果如下:
更改的数据回来了,也可以最开始的时候直接通过最终的pos结束点718来恢复
18,还有⼀种通过时间来恢复,还是先备份当前数据库(备份之前先flush logs创建⼀个新的binlog⽇志⽂件9),然后修改数据插⼊数据后如图,
修改后将当前数据库删除,(删除库之后再执⾏⼀下flush logs创建⼀个新的⽇志⽂件,这样新的操作都写⼊到这个⽂件中,上个⽇志⽂件只⽤来恢复数据,不会有其余数据混⼊)现在我们通过时间点来恢复从备份数据后到删除数据库这期间所有操作的数据,⾸先通过mysqlbinlog来了查看⽇志⽂件9如图所⽰,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。