windows下mysql通过binlog恢复数据

windows下mysql通过binlog恢复数据

文章目录

  • windows下mysql通过binlog恢复数据
  • 前言
  • 一、mysql开启binlog日志
    • 1.查看binlog日志是否开启
    • 2.配置 my.ini文件开启binlog
      • 2.1.找到mysql的 my.ini文件
      • 2.2.在 [mysqld]下添加以下内容
      • 2.3.重启mysql
  • 二、查看binlog日志
  • 三、搭建测试库,删除数据
    • 1.创建一个测试库
    • 2.查询binlog列表
    • 3.查看具体的日志
    • 4.执行shell脚本,回滚数据
      • 4.1 找到日志文件目录
      • 4.2 执行shell命令
  • 总结


前言

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


一、mysql开启binlog日志

1.查看binlog日志是否开启

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

如果是ON则代表开启,OFF则需要开启
windows下mysql通过binlog恢复数据_第1张图片

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;

windows下mysql通过binlog恢复数据_第2张图片

-- 查看最后一个 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');

windows下mysql通过binlog恢复数据_第3张图片
直接drop 用户表

drop table user;

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

2.查询binlog列表

show master logs;

windows下mysql通过binlog恢复数据_第4张图片

3.查看具体的日志

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

windows下mysql通过binlog恢复数据_第5张图片

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

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

4.1 找到日志文件目录

例如我的是。。。
windows下mysql通过binlog恢复数据_第6张图片

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

你可能感兴趣的:(mysql,数据库,服务器)