MySQL 误删数据怎么办?

相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸某一天突然手一抖把表里的数据修改错误或者误删了,这个时候你会发现各种问题反馈接踵而来。
如果身边有BDA或者有这方面经验的同事那么可以很快解决这个问题,如果没有那么希望这篇文章可以帮到你。建议收藏本文章,如果哪天真的遇到这事找不到文章就可惜了。

第一步:保证 mysql 已经开启binlog,查看命令:

查看binklog是否开启

show variables like '%log_bin%';

查看binlog存放日志文件目录(如下图,博主binlog目录为/data/mysql):

show variables like '%datadir%';

在这里插入图片描述
值为OFF,需开启,值为ON,已开启。

如果没有开启 binlog,也没有预先生成回滚 SQL,那可能真的无法快速回滚了。对存放重要业务数据的 MySQL,强烈建议开启 binlog。

第二步:进入 binlog 文件目录,找出日志文件

在这里插入图片描述

**第三步:切换到 mysqlbinlog 目录(当线上数据出现错误的时候首先可以询问具体操作人记录时间点,这个时候可以借助 mysql 自带的 binlog 解析工具 mysqlbinlog,具体位置在 mysql 安装目录 /mysql/bin/ 下)

在这里插入图片描述

第四步:通过mysqlbinlog工具命令查看数据库增删改查记录(必须切换到mysqlbinlog目录才有效)

mysqlbinlog --no-defaults --database=youxi --start-datetime="2018-11-12 09:00:00" --stop-datetime="2018-11-13 20:00:00" /data/mysql/mysql-bin.000015    > template_coupon_tb_product_category.txt

例子1:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi
的操作日志,输入如下命令将数据写入到一个备用的txt文件中

例子2:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操作日志,并输出到屏幕上

mysqlbinlog --no-defaults --database=youxi
–start-datetime=“2018-11-12 09:00:00” --stop-datetime=“2018-11-13 20:00:00” /data/mysql/mysql-bin.000015 |more

例子3:查询2018-11-12
09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操作日志,并且过滤出 只包括
template_coupon_tb_product_category 表数据的操作记录 ,输入如下命令将数据写入到一个备用的txt文件中

mysqlbinlog --no-defaults --database=youxi
–start-datetime=“2018-11-12 09:00:00” --stop-datetime=“2018-11-13 20:00:00” /data/mysql/mysql-bin.000015 | grep
template_coupon_tb_product_category >
template_coupon_tb_product_category.txt

在这里插入图片描述

mysqlbinlog 命令的语法格式: mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码
数据库名


常用参数选项解释:
–start-position=875 起始pos点
–stop-position=954 结束pos点
–start-datetime=“2016-9-25 22:01:08” 起始时间点
–stop-datetime=“2019-9-25 22:09:46” 结束时间点
–database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
---------------------------------------------------------------------------------------------------------不常用选项:
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
–read-from-remote-server 从某个MySQL服务器上读取binlog日志

第五步:利用第四步输出的sql语句或者txt文本进行语句过滤,重新插入数据或更新数据

作者:一个人的孤独自白,cnblogs.com/-mrl/p/9959365.html

如果看到这里,说明你喜欢这篇文章,请 转发、点赞。扫描关注公众号关注更多内容,找到你想要的 ↓扫描二维码关注公众号↓
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值