首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mysql通过binlog恢复数据

Mysql通过binlog恢复数据

作者头像
入门笔记
发布于 2022-06-02 15:02:38
发布于 2022-06-02 15:02:38
1.5K0
举报
文章被收录于专栏:入门小站入门小站

前提要开启binlog日志

用到的sql脚本

代码语言:javascript
复制
drop database if exists demo;
create database demo;
use demo;
drop table  if exists rumenz;
create table rumenz(id int,name varchar(30));
insert into rumenz(id,name) values(1,'qaz');
insert into rumenz(id,name) values(2,'qaz');
insert into rumenz(id,name) values(3,'qaz');
insert into rumenz(id,name) values(4,'qaz');
insert into rumenz(id,name) values(5,'qaz');
insert into rumenz(id,name) values(6,'qaz');
insert into rumenz(id,name) values(7,'qaz');
insert into rumenz(id,name) values(8,'qaz');

使用以上脚本创建数据库和表

代码语言:javascript
复制
> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| demo               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
> use demo;
> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| rumenz         |
+----------------+

查看rumenz表中的数据

代码语言:javascript
复制
> select * from rumenz;
+------+------+
| id   | name |
+------+------+
|    1 | qaz  |
|    2 | qaz  |
|    3 | qaz  |
|    4 | qaz  |
|    5 | qaz  |
|    6 | qaz  |
|    7 | qaz  |
|    8 | qaz  |
+------+------+
8 rows in set (0.00 sec)

删除rumenz表

代码语言:javascript
复制
> drop table rumenz;
> show tables;
Empty set (0.00 sec)

此时查看binlog正在记录的额文件

代码语言:javascript
复制
> show master status;

image-20210615224824688

正在被记录的文件是mysql3306-bin.000008

刷新binlog日志,保存前面完整的操作

代码语言:javascript
复制
> flush logs;

查看binlog日志,找到需要恢复到的位置

代码语言:javascript
复制
> show binlog events in 'mysql3306-bin.000008';

image-20210615225134682

在3927位置,rumenz表被删除,所以我们找到了恢复数据的结束点

恢复数据

查看前面用到的所有日志文件

代码语言:javascript
复制
> shwo master logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 |      1275 |
| mysql3306-bin.000002 |       386 |
| mysql3306-bin.000003 |      1326 |
| mysql3306-bin.000004 |       205 |
| mysql3306-bin.000005 |       177 |
| mysql3306-bin.000006 |      3020 |
| mysql3306-bin.000007 |       389 |
| mysql3306-bin.000008 |      4046 |
+----------------------+-----------+
8 rows in set (0.00 sec)

恢复数据

常用选项:

代码语言:javascript
复制
--start-position=953                   起始pos点
--stop-position=1437                   结束pos点
--start-datetime="2021-06-01 13:18:54" 起始时间点
--stop-datetime="2021-06-05 13:21:53"  结束时间点
--database=demo                     指定只恢复demo数据库(一台主机上往往有多个数据库,只限本地log日志)
代码语言:javascript
复制
> mysqlbinlog --stop-position=3927    mysql3306-bin.000001 mysql3306-bin.000002  mysql3306-bin.000003 mysql3306-bin.000004  mysql3306-bin.000005 mysql3306-bin.000006  mysql3306-bin.000007 mysql3306-bin.000007 | mysql -uroot -p123456

如果有多个binlog日志文件,需要全部指定上去

如果只恢复指定数据库,如demo数据库,使用-d demo或-database demo

代码语言:javascript
复制
> mysqlbinlog -d demo  --stop-position=3927    mysql3306-bin.000001 mysql3306-bin.000002  mysql3306-bin.000003 mysql3306-bin.000004  mysql3306-bin.000005 mysql3306-bin.000006  mysql3306-bin.000007 mysql3306-bin.000007 | mysql -uroot -p123456

相关文章

Mysql中的binlog入门介绍

Mysql之binlog三种模式

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 用到的sql脚本
  • 使用以上脚本创建数据库和表
  • 删除rumenz表
  • 此时查看binlog正在记录的额文件
  • 查看binlog日志,找到需要恢复到的位置
  • 恢复数据
  • 恢复数据
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档