innobackupex基于binlog日志的恢复 -- 模拟slave恢复
说明:
一般来说,如果恢复的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恢复的更多相关文章
- innobackupex基于binlog日志的恢复 -- 使用mysqlbinlog恢复
备份先做一次完整备份: innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 /data/mysqlba ...
- mysql之 innobackupex备份+binlog日志的完全恢复【转】
前言: MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点. 备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. ...
- mysql之 innobackupex备份+binlog日志的完全恢复(命令行执行模式)
前言:MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点.备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. 1. ...
- 使用全备+binlog日志恢复数据库
1.binlog日志类型 Statement 只记录执行的sql语句,磁盘占用少,但是恢复的时候容易出问题.InodeDB不能使用Statement . Row 记录修改后的具体数据,磁盘占用较多 M ...
- (4.11)mysql备份还原——mysql闪回技术(基于binlog)
0.闪回技术与工具简介 mysql闪回工具比较流行三大类: [0.1]官方的mysqlbinlog:支持数据库在线/离线,用脚本处理binlog的输出,转化成对应SQL再执行.通用性不好,对正则.se ...
- 主从同步工作过程?(binlog日志)
在从数据库服务器的/var/lib/mysql/master.info 记录连接主数据库服务器信息文件mail-relay-bin.XXXXXX 中继日志文件(记录SQL)mail-relay ...
- 删除MySQL binlog日志的方法
对于比较繁忙的OLTP(在线事务处理)系统,由于每天生成日志量大,这些日志如果长时间不清除,将会对磁盘空间带来很大的浪费.因此,定期删除日志是DBA维护MySQL数据库的一个重要工作内容.下面跟大家分 ...
- MySQL复制(二)--基于二进制日志文件(binlog)配置复制
基础环境: 主库 从库 服务器IP地址 192.168.10.11 192.168.10.12 版本 5.7.24 5.7.24 已存在的数据库 mysql> show databases; ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- CentOS常用软件安装方法
软件包介绍 源码包(脚本安装包) 二进制包(RPM包,系统默认包) 源码包 优点 开源,如果有足够的能力,可以修改源代码 编译安装,更加适合自己的系统,稳定高效 缺点 安装步骤较多,容易出错 编译过程 ...
- 动态规划---等和的分隔子集(计蒜课)、从一个小白的角度剖析DP问题
自己还是太菜了,算法还是很难...这么简单的题目竟然花费了我很多时间...在这里我用一个小白的角度剖析一下这道题目. 晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等 ...
- 洛谷P2700 逐个击破
P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,毛主席制 ...
- 2017-10-23 NOIP模拟赛
叉叉 题目描述 现在有一个字符串,每个字母出现的次数均为偶数.接下来我们把第一次出现的字母a和第二次出现的a连一条线,第三次出现的和四次出现的字母a连一条线,第五次出现的和六次出现的字母a连一条线.. ...
- JDK源码-java.lang.String
1.开篇明志 本文来看看String的源码. 2.Java7 API String介绍 String 类代表字符串.Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现. 字符串 ...
- ELK系列(3) - Elasticsearch修改jvm参数
方法 Elasticsearch默认会配置1G的JVM堆的初始值和最大值,该jvm参数被配置在/config/jvm.options里: -Xms1g -Xmx1g 如果只是个人开发小项目,可以把参数 ...
- image在div中有留白如何解决
解决办法: 1. 将img图片display:block,即可去掉div和img之间的空白: 2. 将div的line-height设置得足够小,也可以去掉空白,例如div{line-height:5 ...
- linux中的三种时间
mtime [修改时间] 文件/目录的修改时间 ctime [属性修改时间] 文件目录的属性的修改时间 atime [访问时间]文件/目录的访问时间 stat 123.txt File: `1 ...
- B - Reverse and Compare 小小思维题
http://agc019.contest.atcoder.jp/tasks/agc019_b 一开始的做法是, 用总数减去回文子串数目,因为回文子串怎么翻转都不影响答案. 然后,如果翻转afucka ...
- UVA 5986 - Wizarding Duel 超级脑洞题
给出n个人,每个人两两比赛一场,一共有C(n,2)场比赛,现在给出一个榜,问其是否合法.不合法的话,就改成合法,输出最小需要改的变化. 分数一定是C(n,2)的了, 不和法的情况,比如0,0,2,是不 ...