前言
数据库误删除是个头疼的事情,因为数据恢复时,防止数据避免进入,业务系统需要停机。所以一定要做好备份。
一、binlog2sql简介
binlog2sql是一个用于将MySQL binlog转换成SQL语句的工具。它可以将MySQL binlog中的所有DDL和DML语句转换为易读的SQL语句,方便用户查看和分析。
通过使用binlog2sql,用户可以更好地管理MySQL数据库。例如,可以将binlog用作数据迁移、备份恢复、故障排除等方面的工具。
二、安装binlog2sql
在安装binglog2sql之前,先需要安装python和pymysql扩展,它是基于python环境的
根据文档说明目前在requiretxt的pymysql最高支持5.7的
所以对于8.0版本,需要升级下依赖包,不然程序会报pymysql连接不了数据库的错误。
- 下载binlog2sql工具包
# 进入宿主目录,从git克隆binlog2sql
cd ~
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
- mysql8.0的依赖包升级
根据官网的介绍,默认是不支持mysql8.0,需要修改binlog2sql目录中的requirements.txt文件
PyMySQL==0.9.3
wheel==0.29.0
mysql-replication==0.21
- 添加国内的pip镜像:
我在下载过程中,pip提示包不存在的报错,速度也慢,所以改成阿里云镜像
单次修改
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
全局修改
在linux和macos,配置文件为:$HOME/.pip/pip.conf
在windows上,配置文件为:%HOME%\pip\pip.ini
[global]
timeout = 10
index-url = http://mirrors.aliyun.com/pypi/simple
[install]
trusted-host = mirrors.aliyun.com
安装
pip install -r requirements.txt
三、数据恢复
- 需要在my.cnf中添加几个参数
[mysqld]
server_id = 1
log_bin = binlog
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
- 执行的user的最小权限
select, super/replication client, replication slave
# 建议授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
- 找到binlog日志文件
最近的一条binlog日志文件
show master status;
如果时间不是在当天的,只能在根据误删除的日期去定位了,因为每天binlog日志都有对应的日期
- 执行命令
#进入binlog2sql.py的目录
cd ~/binlog2sql/binlog2sql
#执行
python binlog2sql.py -uroot -p'123456' -dtest -t t_dept_copy2 --start-file='binlog.000803'>~/t_dept_copy2.sql
执行成功后,会记录所有当前操作的SQL语句,我们可以把误删除的库的DELETE,DDL相关的语句去掉,然后重新执行下INSERT语句操作。