mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据

环境:Centos 7.5 + Mysql 8.0.19 + python3.8

先说说遇到的两个坑:

1、PyMySQL使用的版本必须是0.9.3

binlog2sql 源码里 requirements.txt指定的版本是0.7.11,后来尝试了最新版,最后翻了N偏帖子,有位兄弟说必须使用0.9.3,才得以解决

2、UnicodeDecodeError: 'utf-8' codec can't decode byte xxx此类错误

将binlog2sql_util.py中的decode("utf-8")替换为decode("utf-8","ignore")

3、先检查是否有开启log_bin

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第1张图片

python安装过程:

这里,我就准备安装一个 Python3.8 的版本,但是,我不准备覆盖原来的 Python2.7,也就是说,最终在我的系统中,会有两个 Python 的版本,互不干扰。

下载 Python3.8.1 源代码,python各个版本源码链接:https://www.python.org/ftp/python/

wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz

tar -zvxf Python-3.8.1.tgz &&cd Python-3.8.1/

安装依赖:yum install -y wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc libffi-devel

yum --exclude=kernel* update -y

yum groupinstall -y 'Development Tools'

编译安装:./configure prefix=/usr/local/python3 --enable-optimizations

make&&makeinstall

export PATH=$PATH:/usr/local/python3/bin/

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第2张图片

binlog2sql安装过程:yum install -y git

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql

vi requirements.txt

//修改pymysql版本成0.9.3如下图

python3 -m pip install -r requirements.txt

cc78d674459f7fb080871ec76592a235.png

安装成功后查看:

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第3张图片

测试数据:

新增了4条数据,随后删除表数据,操作时间大概为10:47

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第4张图片

mysql版本为8.0.20

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第5张图片

查看当前binlog文件

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第6张图片

恢复过程:

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第7张图片解决方案参考:https://www.blsa.cn/post/detail?id=163

查看误删除操作SQL:python3 binlog2sql.py -h127.0.0.1 -P10002 -uroot -ppassword -d test_db -t test_table --start-file='binlog.000013' --start-datetime='2020-08-17 10:47:00' --stop-datetime='2020-08-17 10:50:00'

32a2761418fe582cd8252571616af317.png这里看到对应时间段的test_db表的 sql 已经被解析出来,但是注意 `addtime`=1 AND `id`='1' AND `name`='2020-08-17 10:46:45' 顺序是错误的。

解析SQL:python3 binlog2sql.py -h127.0.0.1 -P10002 -uroot -ppassword -d test_db -t test_table --start-file='binlog.000013' --start-position=1804 --stop-position=2113 -B > rollback.sql

4403ce88fbe9d4db8d9fc75ef80e78df.png顺序同样是错的,下面使用Linux 命令进行替换修复:

python3 binlog2sql.py --flashback -h127.0.0.1 -P10002 -uroot -ppassword -d test_db -t test_table --start-file='binlog.000013' --start-datetime='2020-08-17 10:47:00' --stop-datetime='2020-08-17 10:50:00' | cut -d '#' -f1 >undo.sql

sed -i 's/addtime/vcol1/g' undo.sql

sed -i 's/name/addtime/g' undo.sql

sed -i 's/id/name/g' undo.sql

sed -i 's/vcol1/id/g' undo.sql

mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据_第8张图片至此修复成功

你可能感兴趣的:(mysql+enable+sql+log_mysql误删操作,使用Binlog2sql闪回工具恢复Mysql8.0 数据)