mysql使用二进制日志恢复数据
Posted Tony-Tse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql使用二进制日志恢复数据相关的知识,希望对你有一定的参考价值。
一、恢复到某个二进制文件
1.开启二进制日志
在mysqld的配置节点下添加如下配置
log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,linux下自行修改路径)
expire_logs_days=10
max_binlog_size=100M
expire_logs_days=10
max_binlog_size=100M
2.重启mysql服务
使用命令show VARIABLES like \'%log_bin%\';查看
![](https://image.cha138.com/20210612/a69bfd676f08454d829054212cd491eb.jpg)
3.创建库和表
create database mytest;
use mytest;
create table t(a int PRIMARY key)ENGINE = INNODB DEFAULT CHARSET=utf8;
flush logs;
use mytest;
create table t(a int PRIMARY key)ENGINE = INNODB DEFAULT CHARSET=utf8;
flush logs;
flush logs,刷新二进制日志后会多出来一个二进制日志
![](https://image.cha138.com/20210612/1b49e4c785db49669f239433a60b3832.jpg)
使用命令查看二进制日志内容
![](https://image.cha138.com/20210612/70af489eadf74160ae4abb2b293e1b90.jpg)
默认会读取配置文件,检测到no--beep会报错。
推荐使用命令:mysqlbinlog --no-defaults E:\\Mysql57BinLog\\binlog.000001
![](https://image.cha138.com/20210612/431847dc2bd1419ba0da35a5832356e5.jpg)
4.插入数据
use mytest;
insert into t select 1 union all select 2 union all select 3;
flush logs;
insert into t select 1 union all select 2 union all select 3;
flush logs;
![](https://image.cha138.com/20210612/821ba6be853e48f8960a590556e06ff2.jpg)
5.删除数据库
drop database mytest;
flush logs;
flush logs;
![](https://image.cha138.com/20210612/066e06f686fb467999d63fc3d65ad2a8.jpg)
6.恢复数据
mysqlbinlog --no-defaults E:\\Mysql57BinLog\\binlog.000001 E:\\Mysql57BinLog\\binlog.000002 E:\\Mysql57BinLog\\binlog.000003 | mysql -u root -p
![](https://image.cha138.com/20210612/471ebc893a1848a2bfbeb97d43ce7435.jpg)
![](https://image.cha138.com/20210612/bcd4c4f1326b4936bd798e146d588e13.jpg)
数据已还原。
-----------------------------------华丽的分割线--------------------------------------------------------------
二、恢复到某一时间点的数据
create table t2(a int PRIMARY key)ENGINE=INNODB default CHARSET=utf8;
insert into t2 values(1),(2),(3),(4),(5);
insert into t2 values(1),(2),(3),(4),(5);
>mysqlbinlog --no-defaults E:\\Mysql57BinLog\\binlog.000006
![](https://image.cha138.com/20210612/d54212204f3e4e7a8cef697336a5a887.jpg)
删除数据
delete from t2 where a < 4;
![](https://image.cha138.com/20210612/683f914586f3487985cc543898ed7326.jpg)
恢复数据
![](https://image.cha138.com/20210612/aa73261b1cc54b77a3c6c2c636b771c0.jpg)
drop database mytest;
删除库mytest,回到最原始的地方
mysqlbinlog --no-defaults --start-position="4" --stop-position="1285" E:\\Mysql57BinLog\\binlog.000006 | mysql -u root -p
![](https://image.cha138.com/20210612/c90885a69d0c42f8a042f77e2e8d1625.jpg)
![](https://image.cha138.com/20210612/5fb8b9bccfe04b40a862e25bdfc7d65c.jpg)
数据恢复成功。
欢迎大家拍砖~~
以上是关于mysql使用二进制日志恢复数据的主要内容,如果未能解决你的问题,请参考以下文章