mysql 时间小于_删库不必跑路,自己动手MySQL数据恢复,真香~~

背景

  今天项目上需要对MySQL进行数据修复,通过比较各种方案和工具,准备使用binlog2sql工具进行“数据闪回”,具体怎么使用呢,安排。

MySQL数据库准备

以恢复某个库的某个表为例,

准备两个一模一样地MySQL,安装上,推荐用yum+rpm方式安装,否则,配置起来能否一次性安装成功,看运气了。

源库:MySQL 5.7.30

目标库:MySQL 5.7.30

源库开启binlog

修改my.cnf配置文件,添加以下内容:

1ab31230cfa391bb97b94c08f2667f87.png

server_id=1# 标识,集群时必须且不能重复
 
log_bin = mysql-bin #必须开启
 
binlog_format = ROW#必须
 
expire_logs_days = 0 #日志保存天数,按需,0代表永久

1ab31230cfa391bb97b94c08f2667f87.png

安装过程

安装PIP

binlog2sql需要Python运行环境,首先安装pip。

pip 是一个 Python 包安装与管理工具,查看本机是否安装了pip,命令如下:

pip -V

 如果没有安装,执行一下命令下载安装,下载前请确保你的服务器能够访问公网权限(貌似是废话,但或许你申请的设备默认是不开的)

wget https://bootstrap.pypa.io/get-pip.py

  python get-pip.py

 再次查看命令

pip -V

看到如下内容,代表安装成功了

e35844019f00de38371adb4b11fdafc2.png

 安装Git

通过yum进行安装,命令如下:

yum -y install git

安装binlog2sql

下载binlog2sql,执行以下命令:

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

下载成功后,会在你当前下载的目录下生成一个binlog2sql目录,在当前目录下执行下面的命令:

pip install -r requirements.txt

安装过程中看到方块乱码别慌,最后出现success,代表ok了

9d950f56bb91f47adb925093fe1bd4b2.png

至此,binglog2sql工具安装就绪。

使用过程

 源库

 查看当前的binlog主文件,命令如下:

 6c8c7647114de45d25b4bfda9fe3026a.png

 可以看到,源库当前正在写入的主log是mysql-bin.000003,将该文件通过SSH等方式,拷贝到目标库任意目录,备用。

目标库

同样执行show master status\G;命令,查看目标库当前binlog主文件,如果文件序号小于源库的序号,例如,目标库目前是mysql-bin.000002,则手工刷出一个或若干个binlog文件,直至可以覆盖源库的binlog序号(文件名)。

9c23bd21ce53fd00ddc539cce2b4468e.png

数据恢复

至此,菜都备齐了,开炒

进入你的binlog2sql的主目录下的binlog2sql目录,执行以下命令:

python binlog2sql.py -h127.0.0.1 -P你的数据库端口 -u数据库用户 -p'数据库密码' --flashback  -d '数据库名称'  -t '表名  --start-file='mysql-bin.000003' --start-datetime='开始时间' --stop-datetime='结束时间'  > flashback-test(名字随便起).sql

命令执行后,就是等待,时间视你的过滤条件多少,binlog文件数据大小,时间区间大小等条件制约,根据你服务器资源情况设置过滤条件。如果数据量过大,可能等不出结果。

没有消息就是好消息,如果经过一段时间的等待,最后成功地看到命令提示符,且生成的文件大小 > 0,恭喜,成功了!

这个SQL文件,就是针对指定时间区间(如果你输入了)等过滤条件内的执行的SQL的反向SQL,在目标表中执行一下,数据就回到你期望的时间点了。

安装遇到的问题及解决

问题一 Python脚本连接Mysql出错

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ... ...

这个在网上有很多文章都是提示你输入格式有问题,如果你不属于这种情况,那么以下的办法会终极解决

你的MySQL使用的caching_sha2_password认证方式,换成mysql_native_password就可以了,具体操作如下:

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘你的密码’;

更多内容可关注作者博客:

https://home.cnblogs.com/u/gz16075140

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值