MySQL二进制日志 恢复数据

MySQL二进制日志

什么是Binlog?

 

二进制日志:记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;
主要作用:复制(Master-Slave 主从同步)、恢复和审计。

 

Binlog相关变量

   

变量名称

变量含义

相关语句

log_bin

Binlog开关

查看变量:show variables like ‘log_bin’;

binlog_format

Binlog日志的格式

查看变量:show variables like 'binlog_format';

Binlog 日志的三种格式

  

格式类型

格式特性

ROW

仅保存记录被修改细节,不记录SQL语句上下文相关信息

STATEMENT

每一条会修改数据的SQL都会记录在Binlog中

MIXED

以上两种level的混合使用

 

日志恢复

方案一. 日志增量恢复数据

先导入上次备份的数据,找到备份数据后 mysqlbinlog 时间点 和 偏移量 (position) 来恢复数据

1: mysqlbinlog 导出 sql 语句来执行,时间和偏移量选择一个就行,示列如下

#通过时间点导出 数据库为xxxx 确实时间:2019-10-24 05:00:00 结束时间:2019-10-24 11:28:00cd 到 mysql/bin下面mysqlbinlog --database=数据库 --start-datetime='2019-10-24 05:00:00' --stop-datetime='2019-10-24 11:28:00'  mysql-bin.xx> /data/binlog.sql
#附docker 命令docker exec -i 容器ID mysqlbinlog --database=数据库 --start-datetime='2019-10-24 05:00:00' --stop-datetime='2019-10-24 11:28:00'  /var/lib/mysql/mysql-bin.xx> /data/binlog.sql

 

#通过 偏移量导出 数据库为xxx 起始偏移量:709272650 结束偏移量:743558867mysqlbinlog ---database=数据库 --start-position=709272650 --stop-position=743558867  mysql-bin.xx> /binlog.sql

 

2:检查导出的 binlog.sql 是否正常, 导出的sql 可能包含编码过的语句,是可以正常执行的,如下图:

SET TIMESTAMP=1571877783/*!*/;BEGIN/*!*/;# at 712883233#191024  8:43:03 server id 1  end_log_pos 712883441 	Table_map: `tzyy`.`recipe` mapped to number 4389056# at 712883441#191024  8:43:03 server id 1  end_log_pos 712883499 	Table_map: `tzyy`.`zyll_state` mapped to number 4389131# at 712883499#191024  8:43:03 server id 1  end_log_pos 712883562 	Table_map: `tzyy`.`recipe_history` mapped to number 4389083# at 712883562#191024  8:43:03 server id 1  end_log_pos 712883648 	Table_map: `tzyy`.`upload_recipe` mapped to number 4389143# at 712883648#191024  8:43:03 server id 1  end_log_pos 712883710 	Table_map: `tzyy`.`recipe_track` mapped to number 4389132# at 712883710#191024  8:43:03 server id 1  end_log_pos 712884420 	Update_rows: table id 4389056# at 712884420#191024  8:43:03 server id 1  end_log_pos 712884767 	Update_rows: table id 4389143 flags: STMT_END_F
BINLOG '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'/*!*/;# at 712884767#191024  8:43:03 server id 1  end_log_pos 712884794 	Xid = 475556393COMMIT/*!*/;# at 712884794

 

3:导入binglog 生成的sql 语句

mysql -uroot -p密码 数据库 <binlog.sql

 

方案二. 日志全量恢复

本方案的前提是你的二进制日志没有被删除(因为硬盘的问题,我们一般只保留了最近七天的日志)

#确定时间点或偏移量,

#时间恢复mysqlbinlog --database=数据库 --start-datetime='开始时间' --stop-datetime='结束时间'  mysql-bin.xx | mysql -u用户名 -p密码 --database=数据库
#附docker 命令docker exec -i mysql容器ID mysqlbinlog --database=数据库 --start-datetime='开始时间' --stop-datetime='结束时间'  /var/lib/mysql/mysql-bin.xx/mysql-bin.xx | docker exec -i mysql容器ID mysql -u用户名 -p密码 --database=数据库
#偏移量恢复mysqlbinlog --database=数据库 --start-position=其实偏移量 --stop-position=结束偏移量 mysql-bin.xxx | mysql -u用户名 -p密码 --database=数据库

 

总结:

方案一我们可以把备份数据导到其他地方,再把增量的二进制日志生成sql 导入,检查无误再导入正式库;

方案二是在正式库直接执行的,有极大的风险,执行前最好备份好数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值