美文网首页
MySQL数据库恢复操作

MySQL数据库恢复操作

作者: A瓶子_7366 | 来源:发表于2019-07-19 13:59 被阅读0次

    业务环境:

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


    相关文章

      网友评论

          本文标题:MySQL数据库恢复操作

          本文链接:https://www.haomeiwen.com/subject/pswjlctx.html