社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

新来的妹纸误删了MySQL数据,把带她的师傅急坏了。。。

鸭哥聊Java • 3 年前 • 476 次点击  
大家好,我是你们的鸭哥
记得点击关注下方公众号,领取 编程资

昨天,鸭哥给大家写的原创技术文,不知道各位小伙伴是否读完?现在的面试跟鸭哥当年出来找工作比起来,难太多了,当年只要你会 ssh,不愁找不到工作,要是再了解一点点底层原理,直接就去大厂了,而现在太难了,各个大厂都有自己的题库,进大厂的难度一点也不亚于高考~


好了,鸭哥最近准备多写写面试题系列,大家多多支持,来看看昨天分享的这道面试题吧。

读者被问题代码折磨,鸭哥劝 NullPointerException 耗子尾汁!!!

正文如下:


来源:cnblogs.com/-mrl/p/9959365.html


相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸某一天突然手一抖把表里的数据修改错误或者误删了,这个时候你会发现各种问题反馈接踵而来。


如果身边有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文本进行语句过滤,重新插入数据或更新数据。



热门推荐:

扫描关注,永不迷路
点分享
点点赞
点在看
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110957
 
476 次点击