linux复盘:innobackupex备份恢复

xtrabackup :只可以备份innodb;

但是我们也需要备份myisam,然后就出来了一个工具:innobackupex

一、innobackupex 备份:

1.1 查看数据目录:

[root@zhdy-03 ~]# ls /data/mysql/
auto.cnf  db1  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql2  performance_schema  test  zhdy01  zhdy02  zhdy03  zhdy-03.err  zhdy-03.pid

其实我们完全可以使用mysqldump去备份myisam和innodb,但是速度有点慢,如果遇到大的数据库很浪费时间!

下面我们就对如上的一些数据进行备份:

1.2 安装percona-xtrabackup工具:

[root@zhdy-03 ~]# rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

[root@zhdy-03 ~]# yum list | grep percona

[root@zhdy-03 ~]# yum install percona-xtrabackup -y

1.3 创建一个备份的用户:

先使用root账户登录;

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bakuser'@'localhost' identified by 'zhangduanya';
Query OK, 0 rows affected (0.00 sec)

创建一个bakuser,且授予RELOAD,LOCK TABLES,REPLICATION CLIENT权限。

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

刷新一下权限;

1.4 备份:

首先创建一个备份的目录;
[root@zhdy-03 ~]# mkdir -p /data/backup/

[root@zhdy-03 ~]# innobackupex --defaults-file=/etc/my.cnf --user=bakuser --password='zhangduanya' -S /tmp/mysql.sock  /data/backup

--defaults-file用来根据my.cnf的信息找打听他datadir数据存储目录
-S /tmp/mysql.sock指定socket,此方法只适用于本地连接,等同于“mysql -uroot -p123456”
/data/backup最后跟要备份到的目标目录

[root@zhdy-03 backup]# du -sh *
92M	2017-08-23_21-23-46

如果在备份的时候有任何的错误,它会自动的停止,并输出错误的信息!

1.5 备份对比:

[root@zhdy-03 backup]# ls /data/mysql/
auto.cnf  db1  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql2  
performance_schema  test  zhdy01  zhdy02  zhdy03  zhdy-03.err  zhdy-03.pid

[root@zhdy-03 backup]# ls /data/backup/2017-08-23_21-23-46/
backup-my.cnf  ibdata1  mysql2              test                    xtrabackup_info     zhdy01  zhdy03
db1            mysql    performance_schema  xtrabackup_checkpoints  xtrabackup_logfile  zhdy02

其实备份的文件+目录几乎是一样的,但是是不可以直接恢复使用的!

但是du -sh 的时候会小很多是因为部分数据可能是缓存之类的

二、innobackupex 恢复:

2.1 模拟数据库被删除:

先停掉数据库;
[root@zhdy-03 backup]# /etc/init.d/mysqld stop 
Shutting down MySQL.. SUCCESS! 

[root@zhdy-03 backup]# mv /data/mysql /data/mysql.bak
[root@zhdy-03 backup]# ls /data/
backup  mysql.bak  wwwroot
[root@zhdy-03 backup]# mkdir -p /data/mysql
[root@zhdy-03 backup]# chown -R mysql.mysql /data/mysql

2.2 恢复数据:

第一步只是初始化了一下;

[root@zhdy-03 backup]# innobackupex --use-memory=512M --apply-log 2017-08-23_21-23-46/

-use-memory=512M:意思是恢复数据指定使用的内存为512M;
(因为这是虚拟机,所以只是测试,要是线上的服务器64G我们可以使用32G来恢复数据,这样速度会更快些)
--apply-log:指定需要恢复的日志文件

2.3 现在进行恢复:

[root@zhdy-03 backup]# innobackupex --defaults-file=/etc/my.cnf --copy-back ./2017-08-23_21-23-46/

即可恢复咱们的备份到mysql目录,而且是原来的位置因为这里调用了datadir的缘故吧

再次检查:

[root@zhdy-03 data]# du -sh *
190M	backup
188M	mysql
188M	mysql.bak
132M	wwwroot

三、innobackupex增量备份

3.1 先全量

innobackupex --defaults-file=/etc/my.cnf --user=bakuser --password=zhangduanya -S /tmp/mysql.sock/data/backup
这里没有-S的指定socket其他步骤相同,测试后不加-S不可备份,这里需补上

xtrabackup: Transaction log of lsn (3037472) to (3037472) was copied.
170824 22:57:58 completed OK!

-----------
等待出现如上消息,意味着我们已经对全量备份完毕。

查看全量备份:

[root@zhdy-03 ~]# ls /data/backup/
2017-08-24_22-57-43

[root@zhdy-03 ~]# du -sh /data/backup/
92M	/data/backup/

3.2 创建增量备份

再开始之前,我们先模拟增加一个库,就是更改一下里面的数据库

[root@zhdy-03 ~]# mysql -uroot -pzhangduanya -e "create database db123"      //创建一个db123库

[root@zhdy-03 ~]# mysql -uroot -pzhangduanya db123 < /tmp/mysqlbak.sql   //把之前备份的数据恢复得到db123库
##注意不用在乎这里备份进去的数据是什么,这是在测试其可用性

第一次增量备份:

[root@zhdy-03 ~]# innobackupex --user=bakuser --password='zhangduanya' -S /tmp/mysql.sock
--incremental /data/backup --incremental-basedir /data/backup/2017-08-24_22-57-43

##这里不需要指定mysql目录了--defaults-file因为和这里没关系了
##指定专门用来备份的账号密码,目录和全量备份的数据

[root@zhdy-03 backup]# du -sh *
92M	2017-08-24_22-57-43
16M	2017-08-24_23-10-21

---------------------------
第一次增量备份的数据只有16M;

3.3 模拟执行第二次增量备份

[root@zhdy-03 backup]# mysql -uroot -pzhangduanya -e "create database lalala"
#创建库

[root@zhdy-03 backup]# mysql -uroot -pzhangduanya lalala < /tmp/mysqlbak.sql 
#导入点数据

[root@zhdy-03 backup]# ls /data/mysql/
auto.cnf  db123    ib_logfile0  lalala  mysql2              test    zhdy02  zhdy-03.err
db1       ibdata1  ib_logfile1  mysql   performance_schema  zhdy01  zhdy03  zhdy-03.pid
#找到我们创建的两个db123,和lalala

[root@zhdy-03 backup]# innobackupex --user=bakuser --password='zhangduanya' -S /tmp/mysql.sock
--incremental /data/backup --incremental-basedir /data/backup/2017-08-24_23-10-21

[root@zhdy-03 backup]# du -sh *
92M	2017-08-24_22-57-43
16M	2017-08-24_23-10-21
17M	2017-08-24_23-41-33

-----------------------------
这里特别注意,也是困扰很多人的一个关键操作,我们再次做增量备份的时候要基于刚刚已经做了的基础上面再次增量,
也就是2017-08-24_23-10-21。也就是说这样这次的增量里面才会有刚刚第一次增量时添加的db123库

四、增量备份的恢复

4.1 为了还原真实性,我模拟删除数据库,并且停掉mysql,利用咱们已经备份的数据去恢复它。

[root@zhdy-03 backup]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS! 

[root@zhdy-03 data]# ls
backup  mysql  wwwroot

[root@zhdy-03 data]# mv /data/mysql/ /data/mysqlbak

[root@zhdy-03 data]# ls /data/
backup  mysqlbak  wwwroot

[root@zhdy-03 data]# mkdir /data/mysql

[root@zhdy-03 data]# chown -R mysql.mysql /data/mysql

[root@zhdy-03 data]# ls 
backup  mysql  mysqlbak  wwwroot

为了不容易混淆,我先把backup目录中的这些备份展示出来:

[root@zhdy-03 backup]# ls
2017-08-24_22-57-43  ##全量
2017-08-24_23-10-21  ##一次增量
2017-08-24_23-41-33  ##二次增量

4.2 先初始化全量备份:

[root@zhdy-03 data]# innobackupex --apply-log --redo-only /data/backup/2017-08-24_22-57-43

--apply-log:指定需要恢复的日志文件
--redo-only:这个是整合合并的东西初始化时候用,最后一步不需要整合了

----
/data/backup/2017-08-24_22-57-43:此为咱们第一次全量备份的数据。

4.3 初始化整合第一次的增量:

[root@zhdy-03 backup]# innobackupex --apply-log --redo-only /data/backup/2017-08-24_22-57-43 
--incremental-dir=/data/backup/2017-08-24_23-10-21

4.4 初始化整合第二次的增量:

[root@zhdy-03 backup]# innobackupex --apply-log --redo-only /data/backup/2017-08-24_22-57-43 
--incremental-dir=/data/backup/2017-08-24_23-41-33

##实验得出如果我们再次做增量备份的时候没有基于刚刚已经做了的基础上面再次增量,那么第二次备份恢复初始化就会报错

4.5 再次把整合好的增量再次初始化一下:

[root@zhdy-03 backup]# innobackupex --apply-log  /data/backup/2017-08-24_22-57-43
#这里就没有了--redo-only

4.6 最后一步恢复:

[root@zhdy-03 ~]# innobackupex --copy-back  /data/backup/2017-08-24_22-57-43/

再次检查数据:

[root@zhdy-03 ~]# ls /data/mysql
db1  db123  ibdata1  ib_logfile0  ib_logfile1  lalala  mysql  mysql2  
performance_schema  test  xtrabackup_info  zhdy01  zhdy02  zhdy03

刚刚创建的db123和lalala也已经全部恢复!

[root@zhdy-03 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

转载于:https://my.oschina.net/u/3655649/blog/1613276

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值