windows下mysql通过binlog恢复数据

windows下mysql通过binlog恢复数据


前言

使用binlog只能针对针对数据量不是很多的情况,真正的生产环境每天几个G的日志文件,不止是光靠binlog恢复的,还有其他方法,此处仅仅只是做学习的记录!


一、mysql开启binlog日志

1.查看binlog日志是否开启

-- 查看binlog 日志是佛开启
show variables like '%log_bin%'

如果是ON则代表开启,OFF则需要开启
在这里插入图片描述

2.配置 my.ini文件开启binlog

2.1.找到mysql的 my.ini文件

2.2.在 [mysqld]下添加以下内容

#(单个节点id)
server-id = 1
#(位置一般和mysql库文件所在位置一样)
log-bin= /mysql/mysql-bin
#(表示此日志保存时间为10天)
expire_logs_days = 10

2.3.重启mysql


二、查看binlog日志

-- 查看所有binlog日志文件列表
show master logs;

在这里插入图片描述

-- 查看最后一个 binlog 日志的编号名称及最后一个操作事件pos结束点,说的直白一点,
-- 每一个操作都会有一个 position 操作点。他可以理解为操作的流水ID 是唯一的而且是逐渐增长的
show master status;
-- 通过这个sql查看 mysql-bin.000001 下内容
show binlog events in 'mysql-bin.000001';
-- 删除所有日志文件,并将文件名和记录点进行重置归零
reset master;

三、搭建测试库,删除数据

1.创建一个测试库

创建库前,先清除历史数据

-- 删除所有日志文件,并将文件名和记录点进行重置归零
reset master;

初始化一个binlog_test 数据库, 创建一张 user 表,并插入四条数据

create table user(
id varchar(255),
name varchar(255),
passwd varchar(255)
);
insert into user values ('1','小明','123456');
insert into user values ('2','小张','111111');
insert into user values ('3','小李','999999');
insert into user values ('4','小虎','123456');

在这里插入图片描述
直接drop 用户表

drop table user;

删除后不用担心,此时我们已经开启了binlog日志,可以根据日志进行回滚数据!!!
重点来了

2.查询binlog列表

show master logs;

在这里插入图片描述

3.查看具体的日志

show binlog events in 'mysql-bin.000001';

在这里插入图片描述

.可以看到我们之前的创建表添加数据的操作是从 389–>1709
.1986 是drop操作

4.执行shell脚本,回滚数据

4.1 找到日志文件目录

例如我的是。。。
在这里插入图片描述

在此目录下cmd

4.2 执行shell命令

mysqlbinlog --start-position=622 --stop-position=1790 --database=binlog_test mysql-bin.000001 | mysql -uroot -p123456

注意,这个语句是一个 shell 脚本,可不是让在 sql 对话框执行的。

  • 因为命令涉及到 binlog.000001 文件,所以要到这个文件下去执行,或者你在命令里补齐全路径
  • 此外当前用户还需要 mysqlbinlog 的执行权限 (cmd能登录mysql就行 mysql -uroot -p )
  • | 管道符后面接mysql 的登录命令,所以需要输入密码

效果如下:
在这里插入图片描述
OK!完成;再去查看数据表就有了


总结

既然我们清楚了他的恢复逻辑,只要我们定时对数据库进行 binlog 备份

打个比方,每隔1个小时 Flush logs; 一次,生成一个新的 binlog 文件。假设有一天,有老6偷了家,我们可以找到所有的 binlog,然后依次执行到被偷家的前一个小时。虽然保不住那最后1个小时的数据,但是,好比啥都没了要强,您说是吧!

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值