Mysql通过binlog恢复数据

Posted 入门小站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql通过binlog恢复数据相关的知识,希望对你有一定的参考价值。

前提要开启binlog日志

用到的sql脚本

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');

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

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| demo               |
mysql              |
| performance_schema |
| sys                |
+--------------------+
> use demo;
> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| rumenz         |
+----------------+

查看rumenz表中的数据

> 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

> drop table rumenz;
> show tables;
Empty set (0.00 sec)

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

> show master status;
image-20210615224824688

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

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

> flush logs;

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

> show binlog events in 'mysql3306-bin.000008';
image-20210615225134682

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

恢复数据

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

> 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)

恢复数据

常用选项:

--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日志)
> 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

> 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

相关文章



近期热文