binlog2sql实战mysql5.7误更新数据恢复

        今天是七夕节,下午工作时候还在想我女朋友在哪里,是不是迷路了,怎么这么多年都还没找到我。突然有个同事找我,说我们的平台有张表显示废弃状态,他已经联系dba看过表没问题了,让我把这个表重新抽取一次,(我们的平台目前还不完善,部分功能界面没有开发)本着严禁的态度,我根据同事给的表名a去数据库查一下,看看是否正确,结果如下:

看了下数据没问题,那就开始更新吧,更新时候我写sql根据id=xxx来更新,于是为了偷懒也为了不出错就直接复制id和22713。

结果执行完一看改变了5084条,不是应该只更新一条吗?再看sql,?id = id,我的22713怎么没粘贴呢。瞬间冷静下来了,一下子多抽取5084张表,明天凌晨的任务得全部延迟,搞不好得卷铺盖走人了,得赶紧想办法恢复数据。

由于这个数据库不是公司dba团队维护,所以dba无法帮助恢复,网上看了下有个工具叫binlog2sql,前提是数据库开启binlog且为row模式,这个库满足条件,咨询了下公司dba同事,他们也是用binlog2sql工具恢复。

看了下这个工具的readme,需要python2.7还有pip、PyMySQL、wheel、mysql-replication。看到这个也挺奔溃的,公司生产服务器不能连接外网,python2.7是自带的,剩下都得手动安装,python手动装包又比较麻烦。

  1. 安装pip
    # 下载pip并上传到服务器
    # https://files.pythonhosted.org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0fbbf6de8f7/pip-18.1.tar.gz
    # ​​​​​​​解压安装
    tar -zxvf pip-18.1.tar.gz && cd pip-18.1 
    # 开始安装
    python setup.py install
    # 安装提示没有setuptools
    # 再下载setuptools上传到服务器并安装
    # https://files.pythonhosted.org/packages/1d/64/a18a487b4391a05b9c7f938b94a16d80305bf0369c6b0b9509e86165e1d3/setuptools-41.0.1.zip
    unzip setuptools-41.0.1.zip && cd setuptools-41.0.1
    # 开始安装
    python setup.py install
    # 安装成功setuptools再次安装pip
    cd pip-18.1 && python setup.py install
    # 安装成功pip
    # 测试pip命令
    pip -V
    # 出现错误提示如下:
    pkg_resources.DistributionNotFound: The 'pip==7.1.0' distribution was not found and is required by the application
    # 我分明安装的是18.1,提示是7.1.0,修改/usr/bin/pip 将里面的7.1.0改为18.1之后没问题了

     

  2. 安装别的依赖
    # 服务器不能连接外网只能通过本地的虚拟机下载依赖包
    pip install -r requirements.txt -d /tmp/requirements
    # 命令执行完后目录下存在以下文件:
    PyMySQL-0.7.11-py2.py3-none-any.whl
    wheel-0.29.0-py2.py3-none-any.whl
    mysql-replication-0.13.tar.gz
    # 将上述3个文件和binlog2sql上传到服务器依次安装依赖
    pip install PyMySQL-0.7.11-py2.py3-none-any.whl
    pip install wheel-0.29.0-py2.py3-none-any.whl
    tar -zxvf mysql-replication-0.13 && cd mysql-replication-0.13 && python setup.py install
    # 测试binllog2sql
    python binlog2sql.py
    # 正确输出帮助信息

     

  3. 恢复数据
    # 按照官网提示新建用户并授权
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'binlog2sql'@'xxx.xxx.xxx.xxx' identified by 'binlog2sql';
    # 找到对应的binlog文件和执行的时间区间然后开始生成逆向sql
    python binlog2sql.py --flashback --back-interval=0 -hxxx.xxx.xxx.xxx -P3306 -ubinlog2sql -p'binlog2sql' -dxxx -tdb_table --start-file='mysql-bin.000116' --start-datetime='2019-08-07 15:35:00' --stop-datetime='2019-08-07 15:41:00' > /tmp/db_table.sql
    # 检查生成的sql文件正好是5084行,检查了下sql也没问题就直接在mysql客户端执行了
    source /tmp/db_table.sql
    

    至此数据恢复了,非常感谢binlog2sql作者开源的工具。以后执行sql也得非常小心了,差点就造成n多个一级故障了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值