【mysql】基于binlog数据恢复指令和坑

1.binlog相关配置

binlog会记录mysql的增、删、改操作,通过binlog可以实现数据恢复、数据备份。


是否开启binlog

show  variables like '%log_bin%';#查询是否开启binlog,mysql8默认开启

在这里插入图片描述
binlog.index是binlog索引目录,记录生成的binlog日志,日志内容在,对应的binlog下,通过后缀区分。
在这里插入图片描述


binlog日志格式

show global variables like '%binlog_format%';#查询binlog格式,必须是row格式

在这里插入图片描述

2.导出binlog日志

可以通过mysqlbinlog指令,对binlog进行操作,通常我们使用这个指令将binlog导出为文本或sql。

mysqlbinlog指令

# 使用 mysqlbinlog 增量备份数据库
mysqlbinlog -v --start-datetime="2023-12-04 21:40:00" --stop-datetime="2023-12-05 00:00:00" $log_path --base64-output=decode-rows > $backup_file
# 使用 mysqlbinlog 增量备份数据库通过position
mysqlbinlog -v --start-position=258879782 --stop-position=258880137 $log_path --base64-output=decode-rows > $backup_file
  • -v :用于显示伪sql语句
  • -datetime:时间条件
  • -position:位置条件
  • $log_path:binlog日志所在的绝对路径(根据实际情况修改)
  • –base64-output=decode-rows:将Base64编码的输出解码为可读的格式
  • $backup_file:输出内容位置(根据实际情况修改)

update

在这里插入图片描述

打开输出的binlog,可以看到伪sql,通过这些我们可以找到想要的日志和操作。

insert

在这里插入图片描述

delete

在这里插入图片描述


binlog中的事件

在binlog中,begin和commit对应事务的开始和提交

在这里插入图片描述

show BINLOG EVENTS in 'binlog.000037';#显示binlog中的事件

在这里插入图片描述
完整的一条update操作(delete、insert类似)
在这里插入图片描述

3.数据恢复

在binlog中找到对应需要恢复的日志,就可以进行数据恢复
数据恢复需要从,begin位置开始,到commit位置,注意区分,是使用End_log_pos这个作为起始
在这里插入图片描述例如,在原有数据为
在这里插入图片描述

然后,update,某一个字段
在这里插入图片描述
现在想要回到,之前的数据,那么可以查询binlog,找到刚刚update的,上一条日志
在这里插入图片描述
找到错误操作的,上一条事务操作,使用begin到commit的End_log_pos作为条件,那么恢复指令为:

mysqlbinlog  --no-defaults --start-position=267706997 --stop-position=267707266 binlog.000037 | mysql -uroot -p123456

填写对应的start和end位置,在后面加上账号密码,执行,发现数据已经恢复
在这里插入图片描述

4.特别注意的坑

为什么bash脚本执行mysqlbinlog,无法找到指令

需要使用mysqlbinlog的绝对地址

 whereis mysqlbinlog # 获取绝对地址

在这里插入图片描述
改为:

/usr/local/mysql/bin/mysqlbinlog  --no-defaults --start-position=267705701 --stop-position=267705953 binlog.000037 | mysql -uroot -p

为什么执行mysqlbinlog,无法数据恢复

mysqlbinlog恢复数据,需要使用同一表的,pos信息进行恢复,如果跨表操作,可以通过查看伪sql进行辅助恢复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLbinlog是一种二进制日志文件,用于记录数据库的修改操作。当数据库出现故障时,可以通过binlog来进行数据恢复MySQL提供了多种工具来进行binlog数据恢复。其中最常用的工具是mysqlbinlogmysqlbinlog是一个命令行工具,用于解析binlog文件,并将其中的SQL语句打印出来。通过mysqlbinlog,可以将binlog中记录的SQL语句重新执行,从而实现数据恢复。 使用mysqlbinlog进行数据恢复的步骤如下: 1. 找到事故发生时的最新的binlog文件和位置。 2. 使用mysqlbinlog命令解析binlog文件: ```shell mysqlbinlog binlog.000001 --start-position=12345 ``` 这将会将binlog文件中从指定位置开始的所有SQL语句输出到终端。 3. 检查输出的SQL语句,确认其正确性,并逐条重新执行,以恢复数据。 除了mysqlbinlog工具外,还有其他一些第三方的工具可以进行binlog数据恢复。例如,Binlog Explorer、Binlog Viewer等工具提供了更加友好的图形界面,方便操作和查看binlog文件。 需要注意的是,在使用binlog进行数据恢复时,要确保事故发生后的binlog文件没有被删除或覆盖,否则无法完全恢复数据。另外,对于大规模的数据库binlog数据恢复可能比较耗时和复杂,需要谨慎操作。 总而言之,mysqlbinlog是一种常用的binlog数据恢复工具,通过解析binlog文件中的SQL语句,可以重新执行这些SQL语句以恢复数据。此外,还有其他一些第三方工具可供选择。在进行binlog数据恢复时,需要注意保留好binlog文件,并进行逐条确认和执行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值