第一步:保证mysql已经开启binlog,查看命令:mysql
查看binklog是否开启sql
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/下)spa
第四步:经过mysqlbinlog工具命令查看数据库增删改查记录(必须切换到mysqlbinlog目录才有效)日志
例子1:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操做日志,输入以下命令将数据写入到一个备用的txt文件中code
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
例子2:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操做日志,并输出到屏幕上server
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文本进行语句过滤,从新插入数据或更新数据