PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 数据库 > MySQL教程 > 正文

    MySQL 通过sql_thread恢复数据

    作者:admin来源:网络浏览:时间:2020-10-03 10:52:51我要评论
    导读:将数据库回档至指定时间点或位置,常常是使用全量备份+binlog增量实现的。而数据量很大的情况下,增量恢复binlog一直是一个苦恼的问题。因为恢复binlog速度十分慢,并且容易出错。
    将数据库回档至指定时间点或位置,常常是使用全量备份+binlog增量实现的。而数据量很大的情况下,增量恢复binlog一直是一个苦恼的问题。因为恢复binlog速度十分慢,并且容易出错。

    处理思路:
    1)重新初始化一个实例,恢复全量备份文件。
    2)找到第一个binlog文件的position,和剩下所有的binlog。
    3)将binlog伪装成relaylog,通过sql thread增量恢复。

    先解析成sql文件,再导入MySQL

    1. mysqlbinlog mysql-bin.000001 --start-position=n > /data/add.sql 
    2. mysqlbinlog mysql-bin.000002 ... mysql-bin.n >> /data/add.sql 
    3. mysql -u -p -S < /data/add.sql 

    直接管道到MySQL中

    1. mysqlbinlog mysql-bin.000001 --start-position=n | mysql -u -p -S 
    2. mysqlbinlog mysql-bin.000002 ... mysql-bin.n | mysql -u -p -S 

    直接管道进去的方式,并不一定安全,手册上也有指明:

    If you have more than one binary log to execute on the MySQL server,
    the safe method is to process them all using a single connection to the server.

    关于这种方式的更多内容,可以参考:

    https://dev.mysql.com/doc/refman/5.7/en/point-in-time-recovery.html

    然而这两种方式原理都是一样的,通过mysqlbinlog解析成sql并导入到MySQL中。

    优点:

    操作方便,逻辑简单。
    无需关闭mysqld。

    缺点:

    遇到ERROR难以定位位置,难以“断点恢复”。
    特殊字符或字符集的问题。
    max_allowed_packet问题。
    恢复速度慢。
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-35-6334-1.html