相信后端研发同学在开发过程中经常会遇到需要临时修改线上数据的情况。数据被错误修改或误删除。这时候你会发现各种问题和反馈接踵而至。如果你有BDA或有这方面经验的同事,你可以很快解决这个问题。如果没有,希望这篇文章能帮到你。第一步:确保mysql已经开启了binlog,检查命令:检查是否启用了binlogshowvariableslike'%log_bin%';查看binlog存放日志文件目录(如下图博主的binlog目录为/data/mysql):showvariableslike'%datadir%';如果值为OFF,则需要开启;如果该值为ON,则它已打开。如果没有开启binlog,没有预先生成回滚SQL,可能真的无法快速回滚。对于存储重要业务数据的MySQL,强烈建议开启binlog。Step2:进入binlog文件目录,找到日志文件Step3:切换到mysqlbinlog目录(当线上数据出现错误时,可以先让具体的操作人员记录下时间点,此时,你可以使用mysql自带的binlog工具mysqlbinlog,具体位置在mysql安装目录下**/mysql/bin/)第四步:使用mysqlbinlog工具命令查看数据库的增删改查记录(必须切换到mysqlbinlog目录下才有效)例1:查询2018-11-1209:00:00到2018-11-1320:00:00数据库为youxi的操作日志,输入以下命令将数据写入备用txt文件mysqlbinlog--no-defaults--database=youxi--start-datetime="2018-11-1209:00:00"--stop-datetime="2018-11-1320:00:00"/data/mysql/mysql-bin.000015>template_coupon_tb_product_category.txt例2:查询2018-11-1209:00:00到2018-11-1320:00:00数据库是操作loyouxi的g,并输出到屏幕mysqlbinlog--no-defaults--database=youxi--start-datetime="2018-11-1209:00:00"--stop-datetime="2018-11-1320:00:00"/data/mysql/mysql-bin.000015|more例3:查询2018-11-1209:00:00到2018-11-1320:00:00数据库为游记的操作日志,以及过滤掉只包含template_coupon_tb_product_category表数据的操作记录,输入以下命令将数据写入备用txt文件mysqlbinlog--no-defaults--database=youxi--start-datetime="2018-11-1209:00:00"--stop-datetime="2018-11-1320:00:00"/data/mysql/mysql-bin.000015|greptemplate_coupon_tb_product_category>template_coupon_tb_product_category.txtmysqlbinlog命令语法:mysqlbinlogmysql-bin.0000xx|mysql-u用户名-p密码数据库名--------------------------------------------------------常用参数选项说明:--start-position=875起始pos点--stop-position=954结束pos点--start-datetime="2016-9-2522:01:08"起始时间点--stop-datetime="2019-9-2522:09:46"结束时间点--database=zyyshop指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只有本地log日志)------------------------------------------------------不常用的选项:-u--user=name连接到远程主机的用户名-p--password[=name]连接到远程主机的密码-h--host=namefromtheremotehostGetbinloglogs--read-from-remote-server从MySQL服务器读取binlog日志第五步:使用sqlstateme第4步输出的nt或txt文本,用于过滤语句、重新插入数据或更新数据
