说明:
一般来说,如果恢复的binlog量不大,可以使用此方法来恢复:
mysqlbinlog /data/mysqlbak/binlogbak/restoredb-bin.000018 |mysql -u root -pchengce243

但是如果binlog量非常大,使用此方法会非常慢,下面介绍一种方法,让MySQL模拟成slave恢复,速度非常快。

测试表中数据
mysql> select * from testdb.testtab;
+-------+-----------+
| id | name |
+-------+-----------+
| 10000 | test |
| 10001 | incr_bak |
| 10002 | incr_bak2 |
+-------+-----------+

备份
先做一次完整备份:

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

执行完命令后,/data/mysqlbak 目录下会生成目录: 2018-08-07_15-11-36

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

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

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

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

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

[root@restoredb ~]# ll /data/mysql/*bin*
[root@restoredb mysql]# ll /data/mysql/*bin*
-rw-r----- 1 mysql mysql 205 Aug 7 15:12 /data/mysql/restoredb-bin.000001
-rw-r----- 1 mysql mysql 205 Aug 7 15:12 /data/mysql/restoredb-bin.000002
-rw-r----- 1 mysql mysql 205 Aug 7 15:12 /data/mysql/restoredb-bin.000003
-rw-r----- 1 mysql mysql 479 Aug 7 15:13 /data/mysql/restoredb-bin.000004
-rw-r----- 1 mysql mysql 205 Aug 7 15:13 /data/mysql/restoredb-bin.000005
-rw-r----- 1 mysql mysql 480 Aug 7 15:13 /data/mysql/restoredb-bin.000006
-rw-r----- 1 mysql mysql 205 Aug 7 15:13 /data/mysql/restoredb-bin.000007
-rw-r----- 1 mysql mysql 205 Aug 7 15:13 /data/mysql/restoredb-bin.000008
-rw-r----- 1 mysql mysql 205 Aug 7 15:13 /data/mysql/restoredb-bin.000009
-rw-r----- 1 mysql mysql 154 Aug 7 15:13 /data/mysql/restoredb-bin.000010
-rw-r----- 1 mysql mysql 230 Aug 7 15:13 /data/mysql/restoredb-bin.index

停止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 44
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000001
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000002
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000003
-rw-r----- 1 root root 479 Aug 7 15:14 restoredb-bin.000004
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000005
-rw-r----- 1 root root 480 Aug 7 15:14 restoredb-bin.000006
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000007
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000008
-rw-r----- 1 root root 205 Aug 7 15:14 restoredb-bin.000009
-rw-r----- 1 root root 177 Aug 7 15:14 restoredb-bin.000010
-rw-r----- 1 root root 230 Aug 7 15:14 restoredb-bin.index

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

恢复
直接复制 /data/mysqlbak/2018-08-07_15-11-36 目录下文件到 /data/mysql 目录下,然后修改权限
cp -r /data/mysqlbak/2018-08-07_15-11-36/* /data/mysql/
chown -R mysql:mysql /data/mysql

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

查看 binlog 和pos点
[root@restoredb mysql]# cat xtrabackup_binlog_info
restoredb-bin.000001 154

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

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

开始使用模拟slave的方式恢复binlog日志
1.随意change一个不存在的地址,格式和正常的一样。
change master to master_host='1',master_user='1',master_password='1',master_port=1,master_log_file='1',master_log_pos=1;

2.关闭 MySQL。
/etc/init.d/mysqld stop

3.把binlog rename成relaylog的名字。
cd /data/mysqlbak/binlogbak/
rename "bin" "relay-bin" *

4.把binlog移到定义的relaylog目录,如果存在对应文件,直接覆盖,并修改权限。
cp /data/mysqlbak/binlogbak/* /data/mysql/
chown mysql:mysql /data/mysql/restoredb-relay-bin.*

5.把rename后的binlog的绝对路径全部写到 restoredb-relay-bin.index文件,一行写一个。
/data/mysql/restoredb-relay-bin.000001
/data/mysql/restoredb-relay-bin.000002
/data/mysql/restoredb-relay-bin.000003
/data/mysql/restoredb-relay-bin.000004
/data/mysql/restoredb-relay-bin.000005
/data/mysql/restoredb-relay-bin.000006
/data/mysql/restoredb-relay-bin.000007
/data/mysql/restoredb-relay-bin.000008
/data/mysql/restoredb-relay-bin.000009
/data/mysql/restoredb-relay-bin.000010

6.修改 relay-log.info 里面配置,修改第二行和第三行,第二行修改为index文件里面的第一行,第三行指定POS点。

7.启动 MySQL。
/etc/init.d/mysqld start

8.启动 sql_thread进程。
start slave sql_thread;

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

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

innobackupex基于binlog日志的恢复 -- 模拟slave恢复的更多相关文章

  1. innobackupex基于binlog日志的恢复 -- 使用mysqlbinlog恢复

    备份先做一次完整备份: innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 /data/mysqlba ...

  2. mysql之 innobackupex备份+binlog日志的完全恢复【转】

    前言: MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点. 备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. ...

  3. mysql之 innobackupex备份+binlog日志的完全恢复(命令行执行模式)

    前言:MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点.备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. 1. ...

  4. 使用全备+binlog日志恢复数据库

    1.binlog日志类型 Statement 只记录执行的sql语句,磁盘占用少,但是恢复的时候容易出问题.InodeDB不能使用Statement . Row 记录修改后的具体数据,磁盘占用较多 M ...

  5. (4.11)mysql备份还原——mysql闪回技术(基于binlog)

    0.闪回技术与工具简介 mysql闪回工具比较流行三大类: [0.1]官方的mysqlbinlog:支持数据库在线/离线,用脚本处理binlog的输出,转化成对应SQL再执行.通用性不好,对正则.se ...

  6. 主从同步工作过程?(binlog日志)

    在从数据库服务器的/var/lib/mysql/master.info   记录连接主数据库服务器信息文件mail-relay-bin.XXXXXX   中继日志文件(记录SQL)mail-relay ...

  7. 删除MySQL binlog日志的方法

    对于比较繁忙的OLTP(在线事务处理)系统,由于每天生成日志量大,这些日志如果长时间不清除,将会对磁盘空间带来很大的浪费.因此,定期删除日志是DBA维护MySQL数据库的一个重要工作内容.下面跟大家分 ...

  8. MySQL复制(二)--基于二进制日志文件(binlog)配置复制

    基础环境:   主库 从库 服务器IP地址 192.168.10.11 192.168.10.12 版本 5.7.24 5.7.24 已存在的数据库 mysql> show databases; ...

  9. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

随机推荐

  1. matlab求定积分和不定积分

    matlab求定积分与不定积分 创建于2018-03-21 22:42 求定积分与不定积分是一件比较繁琐的事,但是我们可以借助matlab,下面与大家分享解决方法 材料/工具 matlab 求不定积分 ...

  2. CacheManager 概述

    1. CacheManager 管理缓存,而缓存可以是基于内存的缓存,也可以是基于磁盘的缓存 2. CacheManager 需要通过 BlockMananger 来操作数据: 3. 当 Task 运 ...

  3. Spring MVC 基于Method的映射规则(注解版)

    在Restful风格的web开发中,根据不同的请求方法使用相应的控制器处理逻辑成为核心需求,下面就看看如何在Spring MVC中识别不同的请求方法. 请求方法 在Http中,请求的方法有很多种,最常 ...

  4. [Xcode 实际操作]四、常用控件-(15)MKMapView加载简单视图

    目录:[Swift]Xcode实际操作 本文将演示地图视图的使用方法. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先往视图控制 ...

  5. Docker容器构建过程的安全性分析

    来源:嘶吼专业版 ID:Pro4hou DevOps概念的流行跟近些年微服务架构的兴起有很大关系,DevOps是Dev(Development)和Ops(Operations)的结合,Dev负责开发, ...

  6. App渠道统计方法全面解析 总有一种适合你

    一.App渠道统计对于App推广运营的重要性 (理解App渠道统计重要性的老司机,请直接移步到第二部分) App服务的竞争重点已经由功能竞争转向市场和运营的竞争,而App的推广与运营离不开App渠道统 ...

  7. array类型的方法

    var arr1 = [12,454,'dafda','feagfag',23]; var arr2 = [46468,'ffwfe','dafs','dfsfs']; arr1.indexOf('d ...

  8. 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串

    编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...

  9. android 缓存路径

    用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的.大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中.这样当该应用被卸载后,这些数据还保 ...

  10. 4 - Channelhandler和ChannelPipeline

    4.1 Channelhandler 4.1.1 Channel声明周期(状态事件) 方法 描述 ChannelUnregistered Channnel已创建,但是未注册到EventLoop Cha ...