zoukankan      html  css  js  c++  java
  • innobackupex基于binlog日志的恢复 -- 使用mysqlbinlog恢复


    备份
    先做一次完整备份:

    innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 /data/mysqlbak

    执行完命令后,/data/mysqlbak 目录下会生成目录: 2018-08-06_14-19-12

    记下操作后的 position 点
    mysql> show master status;
    +----------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +----------------------+----------+--------------+------------------+-------------------+
    | restoredb-bin.000001 | 154 | | | |
    +----------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

    多切换几次 binlog日志
    mysql> flush logs;

    [root@restoredb ~]# ll /data/mysql/*bin*
    -rw-r----- 1 mysql mysql 205 Aug 6 14:26 /data/mysql/restoredb-bin.000001
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000002
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000003
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000004
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000005
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000006
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000007
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000008
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000009
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000010
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000011
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000012
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000013
    -rw-r----- 1 mysql mysql 154 Aug 6 15:09 /data/mysql/restoredb-bin.000014
    -rw-r----- 1 mysql mysql 322 Aug 6 15:09 /data/mysql/restoredb-bin.index

    mysql> show master status;
    +----------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +----------------------+----------+--------------+------------------+-------------------+
    | restoredb-bin.000014 | 154 | | | |
    +----------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)


    插入测试数据
    insert into testtab values (20001,'full_bak');

    多切换几次 binlog日志
    mysql> flush logs;

    再插入测试数据
    insert into testtab values (20002,'full_bak2');

    [root@restoredb ~]# ll /data/mysql/*bin*
    -rw-r----- 1 mysql mysql 205 Aug 6 14:26 /data/mysql/restoredb-bin.000001
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000002
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000003
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000004
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000005
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000006
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000007
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000008
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000009
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000010
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000011
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000012
    -rw-r----- 1 mysql mysql 205 Aug 6 15:09 /data/mysql/restoredb-bin.000013
    -rw-r----- 1 mysql mysql 479 Aug 6 15:13 /data/mysql/restoredb-bin.000014
    -rw-r----- 1 mysql mysql 205 Aug 6 15:13 /data/mysql/restoredb-bin.000015
    -rw-r----- 1 mysql mysql 205 Aug 6 15:13 /data/mysql/restoredb-bin.000016
    -rw-r----- 1 mysql mysql 205 Aug 6 15:13 /data/mysql/restoredb-bin.000017
    -rw-r----- 1 mysql mysql 429 Aug 6 15:14 /data/mysql/restoredb-bin.000018
    -rw-r----- 1 mysql mysql 414 Aug 6 15:13 /data/mysql/restoredb-bin.index

    再插入测试数据
    insert into testtab values (20003,'full_bak3');


    停止MySQL服务并清空数据目录:

    /etc/init.d/mysqld stop


    备份binlog(正常情况下,这些binlog会备份到binlog server,此处用复制模拟binlog server备份路径)。

    [root@restoredb mysql]# cp *bin* /data/mysqlbak/binlogbak/
    [root@restoredb mysql]# ll /data/mysqlbak/binlogbak/
    total 76
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000001
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000002
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000003
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000004
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000005
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000006
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000007
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000008
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000009
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000010
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000011
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000012
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000013
    -rw-r----- 1 root root 479 Aug 6 15:19 restoredb-bin.000014
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000015
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000016
    -rw-r----- 1 root root 205 Aug 6 15:19 restoredb-bin.000017
    -rw-r----- 1 root root 727 Aug 6 15:19 restoredb-bin.000018
    -rw-r----- 1 root root 414 Aug 6 15:19 restoredb-bin.index


    清空数据文件
    rm -rf /data/mysql/*


    恢复
    直接复制 /data/mysqlbak/2018-08-06_14-19-12 目录下文件到 /data/mysql 目录下,然后修改权限
    cp -r /data/mysqlbak/2018-08-06_14-19-12/* /data/mysql/
    chown -R mysql:mysql /data/mysql

    直接启动数据
    /etc/init.d/mysqld start

    查看此时的testtab表:
    mysql> select *from testtab;
    +-------+-----------+
    | id | name |
    +-------+-----------+
    | 10000 | test |
    | 10001 | incr_bak |
    | 10002 | incr_bak2 |
    +-------+-----------+

    mysql> show master status;
    +----------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +----------------------+----------+--------------+------------------+-------------------+
    | restoredb-bin.000001 | 154 | | | |
    +----------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

    测试数据 (20001,'full_bak')并不存在,说明binlog日志的数据并没有恢复


    开始恢复binlog日志

    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000001 --start-position=154 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000002 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000003 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000004 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000005 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000006 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000007 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000008 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000009 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000010 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000011 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000012 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000013 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000014 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000015 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000016 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000017 |mysql -u root -pchengce243
    mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000018 |mysql -u root -pchengce243


    查看数据
    mysql> select *from testtab;
    +-------+-----------+
    | id | name |
    +-------+-----------+
    | 10000 | test |
    | 10001 | incr_bak |
    | 10002 | incr_bak2 |
    | 20001 | full_bak |
    | 20002 | full_bak2 |
    | 20003 | full_bak3 |
    +-------+-----------+
    6 rows in set (0.01 sec)

    发现已经是最新的数据,已经恢复过来。

  • 相关阅读:
    模仿商品分类点击效果
    Element MenuNav刷新后点击菜单保留选中状态
    element后端管理布局
    Element NavMenu动态生成导航菜单
    谁的速度快!谁背锅(技术解析)
    “非科班自学”复盘两个月时间在年底成功拿下了字节、阿里offer,入职了字节!
    用了这么久,你真的明白 HttpClient的实现原理了吗?
    求你了,不要再在对外接口中使用枚举类型了
    Docker 实战总结(非常全面),收藏了!
    Service层和Dao层真的有必要每个类都加上接口吗?
  • 原文地址:https://www.cnblogs.com/liang545621/p/9430601.html
Copyright © 2011-2022 走看看