资讯专栏INFORMATION COLUMN

MySQL数据误删除恢复

IT那活儿 / 610人阅读
MySQL数据误删除恢复

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!





事件背景


开发反馈误删除了部分业务数据,需要恢复数据。 
这里采用binlog2sql工具进行数据回滚
环境:
CentOS Linux release 7.4.1708 (Core)
mysql  Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL)
数据库开启binlog。
因为数据库server端服务器没有root权限,为了方便安装, 所以在网络打通且有root权限的测试服务器上安装工具恢复数据。





下载及安装



1. 安装包下载

由于环境无法连接互联网,所有采用下载安装包的方式进行安装。
  • 下载Python-3.8.2
    https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
  • 下载Binlog2sql

     https://codeload.github.com/danfengcao/binlog2sql/zip/master

  • 下载PyMySQL-0.9.3

    https://codeload.github.com/PyMySQL/PyMySQL/tar.gz/v0.9.3

  • 下载mysql-replication-0.21
    https://files.pythonhosted.org/packages/e3/54/8c496e300d610299bf168e2068dc10a64b66b299cbe596a27aac5d5b3e7b/mysql-replication-0.21.tar.gz

2. pip安装

#yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc libffi-devel
#tar -xvf Python-3.8.2.tar.xz
#cd Python-3.8.2
./configure --prefix=/usr --with-ensurepip --with-system-ffi
make && make install
root@localhost.localdomain:[/root/soft]python3 --version
Python 3.8.2
root@localhost.localdomain:[/root/soft]pip3 --version
pip 19.2.3 from /usr/lib/python3.8/site-packages/pip (python 3.8)

3. PyMySQL&mysql-replication安装

#pip3 install PyMySQL-0.9.3.tar.gz
#pip3 install mysql-replication-0.21.tar.gz
root@localhost.localdomain:[/root/soft]pip3 list
Package Version
----------------- -------
mysql-replication 0.21
pip 19.2.3
PyMySQL 0.9.3
setuptools 41.2.0

4. 解压binlog2sql

#unzip binlog2sql-master.zip
#mv binlog2sql-master/binlog2sql ./
常用参数:
  • 可选参数
    --stop-never
    -K, --no-primary-key
    -B, --flashback
    --back-interval
  • 连接参数
    -h -u -p -P
  • 日志过滤参数
    --start-file --stop-file --start-position --stop-position --start-datetime --stop-datetime
  • 对象过滤参数
    -d DATABASES2 DATABASES2 -t TABLE1 TABLE2
  • 类型过滤参数
    --only-dml --sql-type INSERT UPDATE DELETE




数据恢复



同开发确认误操作的时间以及表名。根据binlog的时间确定采用哪个binlog进行数据恢复。
执行命令:可以查看恢复前执行的SQL。
python binlog2sql/binlog2sql.py -utestuser -pxxx-dtestdb -t test --start-file=mysql-bin.000013 --start-datetime=2022-
03-01 14:30:00  --stop-datetime=2022-03-01 15:30:00  --only-dml –sql-type= DELETE >delete.txt
执行命令:生成回滚SQL。
python binlog2sql/binlog2sql.py  -B -utestuser -pxxx-dtestdb -t test --start-file=mysql-bin.000013 --start-
datetime=2022-03-01 14:30:00  --stop-datetime=2022-03-01 15:30:00  --only-dml –sql-type= DELETE >insert.txt
最终执行回滚SQL重新插入数据即成功恢复数据。
mysql>source insert.txt



END




本文作者:吴 昊(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129441.html

相关文章

  • Web开发经验(1)防止MySQL数据更新/删除

    摘要:引言数据库一直是个大问题。那么如果做到防止数据库误删或者是误更新,可以参考下以下几点,下面总结的都是业务层面,和一些配置层面。软删除的好处也很明显,如果是业务发现误删,还能有回旋的余地。账号在非必须情况下,尽量不要参与日常运维,维护的工作。 引言   数据库一直是个大问题。如果没有做数据备份,或者是开启binlog,那真得就是没了就是没了,全表更新就是真的回不去了,就算开启了备份,也很...

    keke 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<