基于Innobackupex的完全恢复

对于MySQL的完全恢复,我们可以借助于Innobackupex的多重备份加上binlog来将数据库恢复到故障点。这里的完全恢复是相对于时点恢复(也叫不完全恢复)。本文主要演示了基于Innobackupex如何做一个完全恢复,供大家参考。

有关Innobackupex的备份恢复的知识点请参考以下链接:
        Innobackupex 全备数据库
        使用mysqlbinlog提取二进制日志
        基于Innobackupex的全备恢复
        基于Innobackupex的增备及恢复

1、完全恢复的概念

完全恢复是指使用备份加上binlog日志将数据库恢复到最新的时间点。
    完全恢复的依赖条件为完整的数据库备份及binlog存在,只要2者完整存在,我们即可以将其完整的还原到最新状态。
    完全恢复的概念不限于热备与逻辑备份(mysqldump)方式,都可以实现完全恢复。

2、演示备份过程

a、创建演示环境
[email protected][(none)]> show variables like ‘version‘;  --当前MySQL版本
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| version       | 5.6.12-log |
+---------------+------------+

[email protected][(none)]> use tempdb;  

[email protected][tempdb]> create table tb(id smallint,val varchar(20));  

[email protected][tempdb]> insert into tb  values(1,‘fullbak‘);  

--创建一个全备
SHELL> innobackupex --user=robin -password=xxx --port=3606 --socket=/tmp/mysql3606.sock --defaults-file=/etc/my3606.cnf \
> /hotbak/full --no-timestamp   

b、创建一个增备
--在创建增备前插入一条记录到tb
[email protected][tempdb]> insert into tb values(2,‘Incbak‘);  

SHELL> innobackupex --user=robin -password=xxx --port=3606 --socket=/tmp/mysql3606.sock --defaults-file=/etc/my3606.cnf \
> --incremental /hotbak/inc --incremental-basedir=/hotbak/full --no-timestamp 

3、演示恢复过程

--再次新增一条记录,该记录在保存在binlog,而不会存在于任何备份,这条记录用于验证完全恢复
[email protected][tempdb]> insert into tb values(3,‘Inbinlog‘);
Query OK, 1 row affected (0.01 sec)

--当前的binlog位置
[email protected][(none)]> show master status;
+--------------------+----------+--------------+------------------+-------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+--------------+------------------+-------------------+
| inst3606bin.000014 |     1200 |              |                  |                   |
+--------------------+----------+--------------+------------------+-------------------+

--使用binlog events命令来查看我们最后insert的一条记录
[email protected][(none)]> show binlog events in ‘inst3606bin.000014‘ limit 7,10;
+--------------------+------+------------+-----------+-------------+---------------------------------------------------+
| Log_name           | Pos  | Event_type | Server_id | End_log_pos | Info                                              |
+--------------------+------+------------+-----------+-------------+---------------------------------------------------+
| inst3606bin.000014 |  668 | Query      |      3606 |         751 | BEGIN                                             |
| inst3606bin.000014 |  751 | Query      |      3606 |         862 | use `tempdb`; insert into tb values(2,‘Incbak‘)   |
| inst3606bin.000014 |  862 | Xid        |      3606 |         893 | COMMIT /* xid=449096 */                           |
| inst3606bin.000014 |  893 | Query      |      3606 |         973 | FLUSH ENGINE LOGS                                 |
| inst3606bin.000014 |  973 | Query      |      3606 |        1056 | BEGIN                                             |
| inst3606bin.000014 | 1056 | Query      |      3606 |        1169 | use `tempdb`; insert into tb values(3,‘Inbinlog‘) |
| inst3606bin.000014 | 1169 | Xid        |      3606 |        1200 | COMMIT /* xid=449997 */                           |
+--------------------+------+------------+-----------+-------------+---------------------------------------------------+

--查看binlog的位置
[email protected][(none)]> show variables like ‘log_bin_basename‘;
+------------------+------------------------------------+
| Variable_name    | Value                              |
+------------------+------------------------------------+
| log_bin_basename | /data/inst3606/log/bin/inst3606bin |
+------------------+------------------------------------+

a、先做基于全备的apply,注意,此时使用了--redo-only
SHELL> innobackupex --apply-log --redo-only --user=robin -password=xxx --port=3606 \
> --defaults-file=/etc/my3606.cnf /hotbak/full   

b、基于增备的apply,
--此时没有--redo-only,如果有多个增备,仅仅最后一个增备无需指定--redo-only
SHELL> innobackupex --apply-log --user=robin -password=xxx --port=3606 --defaults-file=/etc/my3606.cnf \
> /hotbak/full --incremental-dir=/hotbak/inc   

c、进行copy back
SHELL> mysqldown -P3606     --copy back前关闭实例
SHELL> netstat -nltp|grep mysql|grep 3606  

SHELL>  mv /data/inst3606/data3606 /data/inst3606/data3606bk
SHELL>  mkdir -p /data/inst3606/data3606  

SHELL> innobackupex --user=robin -password=xxx --port=3606 --copy-back /hotbak/full --defaults-file=/etc/my3606.cnf
SHELL> chown -R mysql:mysql /data/inst3606/data3606    

d、启动恢复后的实例
SHELL> mysqld_safe --defaults-file=/etc/my3606.cnf &

SHELL> sql -P3606
[email protected][(none)]> use tempdb;

--如下,我们可以看到记录3, ‘Inbinlog‘记录并没有被恢复
[email protected][tempdb]> select * from tb;
+------+---------+
| id   | val     |
+------+---------+
|    1 | fullbak |    --Author: Leshami
|    2 | Incbak  |    --Blog  : http://blog.csdn.net/leshami
+------+---------+
2 rows in set (0.00 sec)

e、使用binlog做完全恢复
SHELL> cd /hotbak/inc/
SHELL> more xtrabackup_binlog_info    --从innobackupex获得binlog的位置
inst3606bin.000014      893

--使用mysqlbinlog 追加的最新
SHELL> mysqlbinlog /data/inst3606/log/bin/inst3606bin.000014 --start-position=893 > |mysql -urobin -pxxx -P3606 -S /tmp/mysql3606.sock

--验证,可以看到第3条记录以及被恢复
SHELL> mysql -urobin -pxxx -P3606 -S /tmp/mysql3606.sock -e "select * from tempdb.tb"
Warning: Using a password on the command line interface can be insecure.
+------+----------+
| id   | val      |
+------+----------+
|    1 | fullbak  |
|    2 | Incbak   |
|    3 | Inbinlog |
+------+----------+   

4、小结
a、对于完全恢复,我们需要使用备份加binlog两者结合的方式来实现
b、在恢复期间,首先使用带read-only的apply-log方式来prepare全备
c、接下来使用带read-only的apply-log方式来prepare增备,仅最后一个增备可以不用read-only
d、停止原有实例,并copy-back后启动恢复后的实例
e、从Innobakcupex备份信息中获取最后的binlog日志及位置信息

f、使用mysqlbinlog方式将日志追加到最新时刻

时间: 2024-10-29 13:03:41

基于Innobackupex的完全恢复的相关文章

基于Innobackupex的不完全恢复

对于MySQL的不完全恢复,我们可以借助于Innobackupex的多重备份加上binlog来将数据库恢复到任意时刻.这里的不完全恢复(也叫时点恢复)是相对于完全恢复.本文主要演示了基于Innobackupex如何做一个不完全恢复,供大家参考. 有关Innobackupex的备份恢复的知识点请参考以下链接:        Innobackupex 全备数据库        使用mysqlbinlog提取二进制日志        基于Innobackupex的全备恢复         基于Inno

基于Innobackupex的全备恢复

对于MySQL数据库的热备,xtrabackup是大多数DBA朋友们的选择.xtrabackup内嵌了一个innobackupex可用于热备MySQL数据库.本文描写叙述了基于innobackupex这个工具全备下的恢复并给出演示供大家參考. 有关Innobackupex的全备可參考:Innobackupex 全备数据库 1.Innobackupex恢复原理    After creating a backup, the data is not ready to be restored. The

基于Innobackupex的增备及恢复

MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用.增量备份主要是以全备或增量备份为基础,备份那些变更过的页面.其备份的原理是基于一个不断增长的LSN序列,这个LSN与Oracle的SCN类似.在恢复期间,我们需要将已提交的事务前滚,未提交的事务回滚.本文主要描述了增量备份及增量恢复. 1.增备的相关知识点    As not all information changes between each backup, the incremental ba

Mysql 基于innobackupex 的备份&恢复

备份,对于任何数据库,任何系统都是重中之重.针对Mysql,我选择percona xtrabackup软件.我更喜欢物理层面的热备份.而不是逻辑层面的备份(mysqldump),当然很多情况,也要定期做mysqldump备份.增加一个安全的备份选择. 关于如何下载安装percona xtrabackup,请参考: http://blog.51cto.com/hsbxxl/2107388 先看看innobackupex常用参数 --compact        创建一个不包含第二索引(除了主键之外

基于Innobackupex的MySQL备份脚本

Innobackupex是Xtrabackup的一部分,其实质也是调用xtrabackup.主要的不同是Xtrabackup除了支持innodb引擎外还支持xtradb引擎.本文主要封装了Innobackupex到shell脚本进行定期备份,供大家参考. 1.脚本描述a.支持增量备份以及全备b.需要传递到备份脚本(如备份路径,连接相关参数等)c.基于周日,周三的全量备份,其他增量备份d.可根据需要调整脚本,比如压缩备份的文件夹以及rsync等 2.脚本内容 ###################

Xtrabackup 流备份与恢复

Xtrabackup是MySQL数据库的备份不可多得的工具之一.提供了全备,增备,数据库级别,表级别备份等等.最牛X的还有不落盘的备份,即流备份方式.对于服务器上空间不足,或是搭建主从,直接使用流式备份大大简化了备份后的压缩复制所带来的更多开销.Xtrabackup支持tar格式以及xbstream格式的流备份.本文即是对此展开的相关描述. 1.基于tar格式备份a.备份到本地# innobackupex --stream=tar  /tmp >/backup/bak.tar          

xtrabackup备份与恢复

一:安装xtrabackup 二:备份:完全备份+二进制日志 三:恢复:完全备份+二进制日志 四:完全备份+增量备份 五:恢复:完全备份 1.1如果遇到如下问题是因为需要依赖包 1.2解决方法 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiResperl-DBD-MySQL 1.3如果mysql是通过源码编译方式安装的,在安装xtrabackup的时候记得在最后添加--nodeps,因为它是依赖mysql clien

MYSQL数据库常用知识整理

Evernote Export MYSQL数据库常用知识整理 什么是MYSQL MYSQL的特性 MYSQL存储引擎的分类以及数据文件的介绍 MYSQL赋权 MYSQL备份与恢复 MYSQL的基本操作:增删查改 MYSQL的基本故障判断与处理 MYSQL的调优 MYSQL主主.主从复制的实现 MYSQL大数据备份和恢复 数据文件的损坏与修复 什么是MYSQL MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中

记一次xtrabackup全备恢复故障修复

使用 innobackupex --copy-back完全恢复后,启动mysqld_safe --user=mysql &时报错,无法启动 [[email protected] ~]# df -h Filesystem      Size  Used Avail Use% Mounted on /dev/sda3        19G  4.5G   13G  26% / tmpfs           931M     0  931M   0% /dev/shm /dev/sda1