说明:
一般来说,如果恢复的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. CentOS常用软件安装方法

    软件包介绍 源码包(脚本安装包) 二进制包(RPM包,系统默认包) 源码包 优点 开源,如果有足够的能力,可以修改源代码 编译安装,更加适合自己的系统,稳定高效 缺点 安装步骤较多,容易出错 编译过程 ...

  2. 动态规划---等和的分隔子集(计蒜课)、从一个小白的角度剖析DP问题

    自己还是太菜了,算法还是很难...这么简单的题目竟然花费了我很多时间...在这里我用一个小白的角度剖析一下这道题目. 晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等 ...

  3. 洛谷P2700 逐个击破

    P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,毛主席制 ...

  4. 2017-10-23 NOIP模拟赛

    叉叉 题目描述 现在有一个字符串,每个字母出现的次数均为偶数.接下来我们把第一次出现的字母a和第二次出现的a连一条线,第三次出现的和四次出现的字母a连一条线,第五次出现的和六次出现的字母a连一条线.. ...

  5. JDK源码-java.lang.String

    1.开篇明志 本文来看看String的源码. 2.Java7 API String介绍 String 类代表字符串.Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现. 字符串 ...

  6. ELK系列(3) - Elasticsearch修改jvm参数

    方法 Elasticsearch默认会配置1G的JVM堆的初始值和最大值,该jvm参数被配置在/config/jvm.options里: -Xms1g -Xmx1g 如果只是个人开发小项目,可以把参数 ...

  7. image在div中有留白如何解决

    解决办法: 1. 将img图片display:block,即可去掉div和img之间的空白: 2. 将div的line-height设置得足够小,也可以去掉空白,例如div{line-height:5 ...

  8. linux中的三种时间

    mtime [修改时间] 文件/目录的修改时间 ctime  [属性修改时间] 文件目录的属性的修改时间 atime  [访问时间]文件/目录的访问时间 stat 123.txt   File: `1 ...

  9. B - Reverse and Compare 小小思维题

    http://agc019.contest.atcoder.jp/tasks/agc019_b 一开始的做法是, 用总数减去回文子串数目,因为回文子串怎么翻转都不影响答案. 然后,如果翻转afucka ...

  10. UVA 5986 - Wizarding Duel 超级脑洞题

    给出n个人,每个人两两比赛一场,一共有C(n,2)场比赛,现在给出一个榜,问其是否合法.不合法的话,就改成合法,输出最小需要改的变化. 分数一定是C(n,2)的了, 不和法的情况,比如0,0,2,是不 ...