前提:mysql数据库开启了binlog日志
通过 show variables like 'log_%'; 查看是否开启binlog日志。
操作步骤:
在数据库中执行
show master status;
查看当前数据库对应的binlog文件
再执行
show binlog events in 'binlog.000010';
查看binlog日志记录,查找到相应的Pos节点
执行 /usr/local/mysql/bin/mysqlbinlog --start-position=7171 --stop-position=7546 --database=mydatabase --skip-gtids /var/lib/mysql/binlog.000010 | mysql -uroot -p数据库密码 mydatabase
指定结束点之前的数据恢复 只有--stop-position=7546 无--start-position=7171
指定区间恢复 --start-position=7171 --stop-position=7546
指定时间区间恢复 --start-datatime="2018-11-01 11:11:11" --stop-datatime="2018-11-11 11:11:11"
PS:通过binlog恢复的根本原理就是按照指定区间的sql操作重新执行一遍,因此其间有创建表的语句的话,可能回合当前数据库表冲突,需要略过
另外:
刷新binlog日志,产生新的binlog日志文件 flush logs; 每次mysqld服务重启时,会自动执行此命令,刷新binlog日志。