MySQL:binlog恢复数据

如果删库了,先别急着跑路。

binlog是MySQL的二进制日志,会记录我们的操作。删除的数据可以通过binlog恢复,不过要先开启binlog功能,编辑my.cnf文件完成下面配置后重启。

log-bin=/usr/local/mysql/data/binlog/mysql-bin
# 自定义,保证唯一性
server-id=111
# binlog格式,有3种statement,row,mixed,使用row即可,不会丢失数据
binlog-format=ROW
# 表示每1次执行写入就与硬盘同步,会影响性能,为0时表示,事务提交时mysql不做刷盘操作,由系统决定
sync-binlog=1

重启后连接MySQL,查看开启情况:

mysql> show variables like '%log_bin%'; 

其他相关命令:

mysql> flush logs; // 会多一个最新的bin-log日志
mysql> show master status; // 查看最后一个bin-log日志的相关信息
mysql> reset master; // 清空所有的bin-log日志

如何恢复数据?先看一下binlog文件数据,是二进制文件,无法直接阅读,使用mysql提供的工具:

mysql> /usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001

不需要全懂,能找到关键信息就行,比如begin,commit,根据其对应的position就可以进行恢复

恢复binlog中的全部数据:

/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001 | mysql -uroot -p test(数据库)

 

恢复指定位置数据:

/usr/local/mysql/bin/mysqlbinlog --no-defaults --start-position="100" --stop-position="200"  /usr/local/mysql/data/binlog/mysql-bin.000001 | mysql -uroot -p test(数据库)

 

恢复指定时间的数据:

/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001 --stop-date= "2021-01-06 17:50:00"  --start-date= "2021-01-06 17:51:00" | mysql -uroot -p test(数据库)

 

posted @ 2021-01-06 21:26  以战止殇  阅读(396)  评论(0编辑  收藏  举报