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;
正在被记录的文件是
mysql3306-bin.000008
刷新binlog日志,保存前面完整的操作
> flush logs;
查看binlog日志,找到需要恢复到的位置
> show binlog events in 'mysql3306-bin.000008';
在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
相关文章
近期热文
以上是关于Mysql通过binlog恢复数据的主要内容,如果未能解决你的问题,请参考以下文章