使用mysql的binlog进行数据恢复

1.mysql安装环境

在你本地电脑windows上建一个和生产环境一样的mysql版本

我的是 mysql5.7.43

安装教程可以自行上网搜(这里不做介绍)
可参考:

1.1安装路径

我的mysql安装路径:

D:\mysql\mysql-5.7.43-winx64\bin

*

1.2my.ini

bash 复制代码
[mysqld]
log-bin=mysql-bin
binlog-format=Row
server-id=123456
max_allowed_packet=128M
max_binlog_stmt_cache_size=100M
character-set-server=utf8
explicit_defaults_for_timestamp=1
gtid-mode=ON
enforce-gtid-consistency=ON
#绑定IPv4和3306端口
bind-address = 0.0.0.0
port = 3306
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default_storage_engine=innodb
innodb_buffer_pool_size=1000M
innodb_log_file_size=50M
# 设置mysql的安装目录
basedir=D:\mysql\mysql-5.7.43-winx64\
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-5.7.43-winx64\data
# 允许最大连接数
max_connections=20
# skip_grant_tables
log-error=mysql-error.log
[mysql]
default-character-set=utf8mb4
[mysql.server]
default-character-set=utf8mb4
[mysql_safe]
default-character-set=utf8mb4
[client]
max_allowed_packet=128M
port = 3306
plugin-dir=D:\mysql\mysql-5.7.43-winx64\lib\plugin

1.4检查是否有binlog文件

我的文件在路径下:

bash 复制代码
> D:\mysql\mysql-5.7.43-winx64\bin

1.3data文件

2.环境等都配置好了启动mysql

出现了这个,证明你的mysql应该是启动了

3.建数据库

建一个你自己需要的库和对应的表

4.查询binlog是否开启

SHOW VARIABLES LIKE 'log_bin';

发现我的是关闭状态,如何配置mysql的binlog开启状态,可参考链接:

https://blog.csdn.net/yilufa666666/article/details/110250865

但我的电脑环境参考了也还是打不开binlog开启状态,后来我使用了一个命解决了:

-- 启动mysql

mysqld --defaults-file="D:\mysql\mysql-5.7.43-winx64\bin\my.ini"

--log-bin=mysql-bin --server-id=1

启动命令截图如下:

再次查询,binlog可以开启了

5.下载binlog日志文件

  • 服务器上的,一般也是在mysql安装目录的bin下面,自己去找找吧

5.1打开binlog文件看看


看不懂,因为是二进制嘛

5.2新增数据和删除数据

新增一条数据试试:

再删除

新增和删除的数据,都会在binlog里面存储

5.3把binlog文件转我们能看懂的文件

打开你的cmd,输入文件转换命令

bash 复制代码
D:\mysql\mysql-5.7.43-winx64\bin\mysqlbinlog --base64-output=DECODE-ROWS -vv D:\mysql\mysql-5.7.43-winx64\data\mysql-bin.000020 > D:\mysql\mysql-5.7.43-winx64\logs\output1.sql

命令解释:

你的mysqlbinlog

bash 复制代码
D:\mysql\mysql-5.7.43-winx64\bin\mysqlbinlog

日志文件

bash 复制代码
D:\mysql\mysql-5.7.43-winx64\data\mysql-bin.000020

转换后的文件,类型自己定

bash 复制代码
D:\mysql\mysql-5.7.43-winx64\logs\output1.sql

6.解析转换后的SQL文件

网上说了一堆如何如何来恢复数据的,但是都没有用,起码我没有实现,但是可以通过自己写java解析文件的代码可以恢复删除的数据
代码案例链接

读取文件,把结果写入你要的数据库表里面:

7.遇到的坑

7.1阿里云等服务器上可以执行binlog相关操作恢复数据吗?

去服务器上去执行相关恢复binlog的命令结果遇到了很多问题,最重要的是在解析binlog日志文件时,需要很大的内存,起码的有4G以前,我的服务器刚好是4G,但也扛不住呀

尤其是执行解析后的binlog日志,需要的服务器内存更大,所以还是老老实实的在自己电脑上搭建一套和服务器上一样版本的MYSQL,然后恢复数据吧,

亲测有效。

我恢复的数据量大概是300多万

解析的binlog日志文件太大了,建议在自己电脑上通过代码解析

7.2MYSQL5.7遇到的坑

(1)以前windows电脑上安装的是MYSQL8版本,卸载的时候,没有卸载干净,通过清除注册表相关mysql信息,然后电脑重启在重新安装mysql就好了

当出现以下截图的,就证明你的mysql安装时OK的

我把我mysql的环境变量配置发一下

MYSQL_HOME

D:\mysql\mysql-5.7.43-winx64

%MYSQL_HOME%\bin

7.3binlog的配置无效

这个最烦人,不晓得是那个原因,我也配置了my.ini里面的binlog,但是重启mysql后binlog就是打不开

最终用了一行命令解决了:

上面第四点有说(这个是临时启动mysql哈,中断了mysql就停止了,所以一般我都是在运行中)

-- 启动mysql

bash 复制代码
mysqld --defaults-file="D:\mysql\mysql-5.7.43-winx64\bin\my.ini" --log-bin=mysql-bin --server-id=1

详情可查看我的文档:
【腾讯文档】使用mysql的binlog进行数据恢复

相关推荐
南城花随雪。几秒前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了1 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度3 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮6 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9991 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王2 小时前
《MySQL 数据库备份与恢复》
mysql
苏-言2 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring