MySQL数据库恢复操作
业务环境:
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
cat databasename.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.000003 |/usr/bin/mysql -uroot -p123456 -v databasename
7、 恢复相关业务应用。