DataBase:Mysql误删表数据,通过mysqlbinlog搭配binlog2sql恢复

前提

  你要有最近几天的备份,并且Mysql已开启binlog功能;如果mysql开启了binlog功能的话,mysqlbinlog会记录你的sql语句操作并保存文件,这样可以根据你最近备份数据的时间为基础查到今天删除数据的所有sql语句进行恢复。

我的环境

## 服务器系统版本
# CentOS Linux release 8.5.2111

## 数据库版本
# MySQL 5.7

## 数据库已开启binlog功能(文章有讲如何查看是否开启)

## Python脚本
# binlog2sql

查看binlog功能是否开启

## 登录mysql
mysql -uroot -p123456

## 查看binlog功能是否开启
show variables like 'log_%';

ON: 开启状态,OFF:关闭状态

注意:如果是关闭的状态,下面的可以不用看了

操作场景1

[ 在误删数据的服务器进行操作 ]

查看binlog日志文件

## 切换到 binlog 日志目录
cd /var/lib/mysql

### mysql-bin.000001 类型的文件就是自动备份的日志

 看到这些文件存在就可以了。

 操作场景2

 [ 不能在误删数据的服务器进行操作,只给mysql-bin.000001类型的文件,需要自己搭建mysql进行数据恢复 ]

1. 首先需要找台有Mysql数据库的服务器,然后登录查看是否开启binlog

## 登录Mysql
mysql -uroot -p

## 查看是否开启binlog
show variables like '%log_bin%';

值为OFF,需开启,值为ON,已开启。

2. 开启binlog方式

## 查找mysql的my.cnf文件位置
find / -name my.cnf

## 修改my.cnf文件, 在 [mysqld] 分类下修改或添加如下内容
server_id = 1
# binlog日志文件的目录
log_bin = /var/lib/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full

 

3. 切换到binlog日志的目录

## 切换到 binlog 日志目录
cd /var/lib/mysql

将文件拷贝到此目录

修改mysql-bin.index文件,将备份的binlog文件路径添加进文件内

4. 创建误删数据的表结构

将误删操作表的所属数据库名,表结构在本服务器内的Mysql创建一份!!(重点:用作后续的解析)

安装binlog2sql

方式1

链接:https://pan.baidu.com/s/1hcv3ninx8sPdvoahthuu6w 
提取码:w19i

新建文件夹,并将下载的文件拷贝进去

方式2

下载epel-release

等下需要用到pip命令,下载pip命令需要用到epel-release,它提供额外的软件包

# 下载rpm软件包
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

## 下载完之后,进行安装
rpm -ivh epel-release-latest-7.noarch.rpm

 在这里插入图片描述
在这里插入图片描述

查看服务器的python版本

## python2及之前的版本, 直接使用 python 命令看是否会有帮助信息
python

## python2之后的版本, 使用 python3 命令看是否会有帮助信息
python3

我的服务器python版本是 python3

安装 git 和 pip

# python2 下载命令
yum -y install git python-pip

# python3 下载命令
yum -y install git python3-pip

git 下载 binlog2sql

# 下载binlog2sql脚本
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql

# 更新 requirements.txt 文本
pip install -r requirements.txt

Mysql用户授权

登录mysql

# 登录mysql
mysql -uroot -p

用户授权

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'localhost';

开始解析文件

# python2之前的版本 
python /home/temp/binlog2sql/binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uroot -p123456 -d bioinfo_dev -t base_info --start-file=mysql-bin.005091 > /home/temp/5091.sql

# python3的版本
python3 /home/temp/binlog2sql/binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uroot -p123456 -d bioinfo_dev -t base_info --start-file=mysql-bin.005091 > /home/temp/5091.sql

##    python :用的python编译器
##    /home/temp/binlog2sql/binlog2sql/binlog2sql.py :刚才下载binlog2sql的bin文件夹下binlog2sql.py目录
##    -h127.0.0.1 :主机ip
##    -P3306 :端口号,这里的P是大写!!
##    -uroot :mysql用户名为root
##    -proot :mysqL密码
##    -d bioinfo_dev :误删数据表的所属数据库名字
##    -t base_info :误删数据表的名字
##    –start-file=mysql-bin.005091 :需要解析的mysql-bin.000001类型文件(一般都在 /var/lib/mysql )
##    /home/temp/5091.sql :保存到某个目录下的某个文件内

然后你就得到了这段时间操作的sql命令 !筛选出有用命令进行还原!下次记得一定要备份!!!!!

 

 文章转载至:https://blog.csdn.net/fy_1852003327/article/details/105907402

posted @ 2022-11-28 17:09  怒吼的萝卜  阅读(309)  评论(0编辑  收藏  举报