说明:
一般来说,如果恢复的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. 图片 响应式图像 Images Figures

    响应式图像 Bootstrap中的图像响应 .img-fluid <img class="img-fluid" src="http://lorempixel.com ...

  2. 转:PHP性能:序——谈ab(Apache Bench)压力测试工具

    PHP性能:序——谈ab(Apache Bench)压力测试工具 ab(Apache  Bench)是啥? ab是Apache自带的一个压力测试软件,可以通过ab命令和选项对某个URL进行压力测试.a ...

  3. 洛谷P1800 software_NOI导刊2010提高(06)

    P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...

  4. Hadoop3.0 DataNode启动不成功——java.net.BindException: Port in use: localhost:0 Caused by: java.net.BindException: Cannot assign requested address解决办法

    一.问题出现的原因 启动Hadoop分布式环境时出现主节点的namenode.secondarynamenode启动成功,但是Worker节点datenode启动不成功. hadoop@master$ ...

  5. 树的直径 【bzoj3363】[Usaco2004 Feb]Cow Marathon 奶牛马拉松

    3363: [Usaco2004 Feb]Cow Marathon 奶牛马拉松 Description ​ 最近美国过度肥胖非常普遍,农夫约翰为了让他的奶牛多做运动,举办了奶牛马拉松.马拉 松路线要尽 ...

  6. POJ2151-Check the difficulty of problems

    题目链接:点击打开链接 Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submiss ...

  7. Java基础笔记(十四)——封装

    封装(好比ATM机) 将类的某些信息隐藏在类内部,不允许外部程序直接访问(隐藏对象的信息),通过该类提供的方法来实现对隐藏信息的操作和访问(留出访问的接口). 特点: 1.只能通过规定的方法访问数据. ...

  8. spring boot war

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  9. HIVE获取表的大小和修改日期

    ### 获取表的大小 hdfs dfs -du /user/hive/warehouse/database_name.db/ > 360_du ### 获取表的修改日期 hdfs dfs -ls ...

  10. Murano PTL&Core

    PTL: Serg Melikyan Core: Ekaterina Chernova efedorova@mirantis.com Kirill Zaitsev kzaitsev@mirantis. ...