业务环境:

1、一个数据库实例运行了多个数据库;

2、每日凌晨mysqldump全量备份数据库,同时刷新binlog日志,每个数据库备份时都会刷新,方便确定恢复时的起始pos位置;

3、开启binlog日志功能。

4、某天下午误删某一个数据库。

1、  备份当前使用的binlog日志—复制一份出来。

2、  刷新日志,产生新的binlog日志,让后产生的binlog日志写到新生产的日志文件中。

mysql>flush logs;

3、  停止使用要恢复数据库的相关业务,阻止对要恢复数据库的操作。----------重要,务必保证在恢复数据库之前完成。

4、  分析binlog日志,找到恢复区间。---------------重要

1确定起始位置或时间点

mysql -u$user-p$psd -h$mysql_server -s -N -e "show databases"|grep -v -E"(test|percona|information_schema|performance_schema)"

查看数据库输出顺序,找到对应的binlog日志,

Mysqlbinlogmysq-bin.00000xx |more  查看起始pos或时间点

2确定结束位置或时间点

查看第二步刷新日志前复制的那份binlog日志,找到dropdatabase 库名  语句前的时间点或pos

此时直接用mysqlbinlog不方便,需要将binlog日志导出为sql文件查询:

mysqlbinlog--database=databasename  >databasename.sql

catdatabasename.sql |grep –C 60 drop\ database\ databasename

找到删库之前对应的pos或时间。

5、  使用凌晨备份的全量备份恢复数据库。

# gzip -d database_example_2018-09-25.sql.gz # mysql -uroot -p -v < database_example _2018-09-25.sql

6、  使用binlog日志,恢复自全量备份以后至删库之前的数据。

a)sql恢复(需要手动编辑导出的sql,将那条drop语句剔除掉)# mysqlbinlog -d databasename  --start-position=起始pos   --stop-position=结束pos   mysql-bin.00000xx  >  databasename-bin.sql# vim 002bin.sql #删除里面的drop语句# mysql -uroot -p databasename < databasename-bin.sql

b) binlog恢复

mysqlbinlog--start-position=471 --stop-position=875 --database=databasename  /var/lib/mysql/mysql-bin. |/usr/bin/mysql -uroot -p123456 -v databasename

7、  恢复相关业务应用。