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个小时的数据,但是,好比啥都没了要强,您说是吧!