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

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

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

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

# gzip -d database_example_2018-09-25.sql.gz

# mysql -uroot -p -v

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

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、恢复相关业务应用。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181111G0BS0A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券