通过mysqlbinlog日志文件恢复数据

温馨提示: 操作数据库清先备份数据库!!!!!!!!!

什么是mysqlbinlog?

MySQL的binlog就是大家经常所说的Binary Log,即bin-log,是MySQL存储对数据库改动的二进制文件,也就是记录了所有DDL与DML(select除外)语句,利用它主要可以做两件事:

  • 数据恢复:通过mysqlbinog工具进行恢复;
  • 数据复制:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

如何查看MySQL的日志情况(是否开启等),当MySQL还没开启时候,通过命令:show variables like ‘log_bin%'查看

mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
+---------------------------------+-------+
5 rows in set
查看binlog文件的内容

mysqlbinlog命令语法格式

mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

刷新log日志,自此刻开始产生一个新编号的binlog日志文件

mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

查找pos点

mysql> flush logs;
Query OK, 0 rows affected (0.03 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql数据一般存放在/var/lib/mysql目录,通过mysqlbinlog打开日志文件

/usr/local/mysql/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000001

常用用到的命令

--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2019-10-22 22:01:08" 起始时间点
--stop-datetime="2019-10-23 22:09:46" 结束时间点
如何恢复数据

第一步:找到当前mysql记录的binlog文件,执行show master status;

第二步:查看binlog,定位误操作的pos或者时间段。执行show binlog events in ‘mysql_bin.000001’;

第三步: 通过命令把特定时间的binlog转成sql文件,再执行sql文件

转化命令

mysqlbinlog --start-position=219 --stop-position=681 mysql-bin.000001 > /www/data/sql/test.sql

或者

mysqlbinlog --start-datetime="2019-10-22 22:01:08" --stop-datetime="2019-10-23 22:09:46" mysql-bin.000001 > /www/data/sql/test.sql

恢复命令,或者使用数据库工具执行sql文件

mysql> mysql -uroot -p123456 -v < /www/data/sql/test.sql

其实还有更直接的方法,就是感觉太危险了

一条命令直接回复数据

mysqlbinlog --start-datetime="2019-10-22 22:01:08" --stop-datetime="2019-10-23 22:09:46" --database=数据库 /var/lib/mysql/mysql-bin.000001 | mysql -uroot -p123456 -v 数据库

使用mysqlbinlog的命令路径必须准确,如linux宝塔的命令为/www/server/mysql/bin/mysqlbinlog

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值