MySQL备份与恢复-innobackupex

 :上一片myloder搞崩溃,为什么百度的博文都是抄袭一模一样的,哎烦!

这一片文章我们来介绍物理备份工具xtracebackup!

首先是安装可以percona官网下载安装,下载rpm包直接yum安装即可!

  -y percona-xtrabackup--.-.el6.x86_64.rpm
[root@test2 ~]# xtrabackup -v
xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
#

XtraceBackup是由知名数据库软件服务企业Percona提供的一款热备工具,除了能够支持最为常见的MyISAM,INNODB引擎对象外,还支持XtraDB引擎。

查看percona的安装文件:

[root@test2 ~]# rpm -ql percona-xtrabackup--.-/usr/bin//usr/bin//usr/bin//usr/bin//usr/bin//usr/bin/ 

/usr/share/doc/percona-xtrabackup--./usr/share/doc/percona-xtrabackup--.//usr/share//man1/innobackupex./usr/share//man1/xbcrypt./usr/share//man1/xbstream./usr/share//man1/xtrabackup..gz

 

XtraceBackup备份有以下几个优点:

l  备份集高效,完整,可用。

l  备份任务执行过程中不会有阻塞任务

l  节省磁盘空间,降低网络带宽占用

l  备份集自动验证机制

l  恢复更快

xtrabackup必须在MySQL服务端执行(但是创建的备份集不一定是保存在本地),特别是通过innobackupex命令创建备份集时,由于操作需要连接数据库获取信息,因此还要指定的连接参数(用户名,密码),而且连接所使用的的用户,必须拥有正确的操作权限。

特别提醒:

percona官方在文档中说要在之后的版本中放弃innobackupex工具,推荐使用xtracebackupex工具,但是截至目前为止,我们公司线上环境的备份还是使用的innobackupex。因此这里我们首先介绍innobackupex的备份使用,然后再介绍xtracebackup的使用。

xtraceback2.4.x的官方文档地址:CLICK HEERE

innobackupex的备份与恢复

innobackupex的参数有很多,仅通过实例来讲解经常使用的,若需要某些参数可以查看官方文档!

一个完全备份

[root@test3 ~]# innobackupex --user=root --password=  /data/backup/          #备份很简单,/data/backup/为备份的目录 :: ::  version_check Connecting to MySQL server with DSN  as  :: :: ::, position  :: [] Writing backup- :: []        ... :: [ :: []        ...) to ( :: completed OK!

innobackupex会在备份目录下面创建以当前时间点命名的备份文件如下:

[root@test3 ~]# cd /data/backup/--28_18----28_18--/--28_18--]# -
backup-my.cnf: 为当前数据库配置文件的备份!
:当前备份文件对应的二进制日志文件和position位置,做PIT恢复时使用。

[root@test3 2018-11-28_18-50-47]# 
uuid = 85662dd9-f2fb-11e8-a47c-fa336351fc00                #当前数据库的UUID
name = 
tool_name = innobackupex                                   #包含备份的工具,备份的命令,备份工具的版本,MySQL的版本
tool_command = --user=root --password=... /data/backup/
tool_version = 2.4.4
ibbackup_version = 2.4.4
server_version = 5.7.22-log
start_time = 2018-11-28 18:50:47                           #备份的开始时间
end_time = 2018-11-28 18:51:12                             #备份的结束时间
lock_time = 0
binlog_pos = filename 'test3-bin.000001', position '21818'       #二进制日志的位置
innodb_from_lsn = 0
innodb_to_lsn = 13741543749                                      #刷新到lsn的位置
partial = N
incremental = N                                                  #增量备份
format = file
compact = N                                        
compressed = N
encrypted = N

[root@test3 2018-11-28_18-50-47]# cat         #包含checkpoint的信息,以及备份方式
backup_type = full-backuped
from_lsn = 0
to_lsn = 13741543749
last_lsn = 13741543758
compact = 0
recover_binlog_info = 0
xtrabackup_logfile:【未知】

执行恢复

恢复分为两个步骤:

准备恢复:所谓准备恢复,就是要为恢复做准备。就是说备份集没办法直接拿来用,因为这中间可能存在未提交或未回滚的事务,数据文件不一致,所以需要一个队备份集的准备过程。

[root@test3 ~]# innobackupex --apply-log /data/backup/2018-11-28_18-50-47/        #准备阶段的命令   181128 19:16:57 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.
           At the end of a successful apply-log run innobackupex
           prints "completed OK!".

innobackupex version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
xtrabackup: cd to /data/backup/2018-11-28_18-50-47xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1.....
InnoDB: 5.7.13 started; log sequence number 13741544981xtrabackup: starting shutdown with innodb_fast_shutdown = 1InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 13741545378181128 19:17:02 completed OK!

执行恢复:innobackupex提供了--copy-back参数,就是将指定的备份集,恢复到指定的路径下面(这个指定的路径是配置文件中datadir指定的路径)!

[root@test3 ~]# service mysqld stop       #首先停掉数据库
Shutting down MySQL.... SUCCESS! [root@test3 ~]# rm -fr /data/mysql/*      #情况datadir指定的目录,若是线上环境,确保一定备份过[root@test3 ~]# innobackupex --copy-back /data/backup/2018-11-28_18-50-47/     #备份命令181128 19:20:58 innobackupex: Starting the copy-back operation

IMPORTANT: Please check that the copy-back run completes successfully.
           At the end of a successful copy-back run innobackupex
           prints "completed OK!".

innobackupex version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
......
181128 19:21:30 [01] Copying ./xtrabackup_info to /data/mysql/xtrabackup_info
181128 19:21:30 [01]        ...done
181128 19:21:30 [01] Copying ./xtrabackup_binlog_pos_innodb to /data/mysql/xtrabackup_binlog_pos_innodb
181128 19:21:30 [01]        ...done
181128 19:21:30 [01] Copying ./xtrabackup_galera_info to /data/mysql/xtrabackup_galera_info
181128 19:21:30 [01]        ...done
181128 19:21:30 [01] Copying ./ibtmp1 to /data/mysql/ibtmp1
181128 19:21:30 [01]        ...done
181128 19:21:30 completed OK!        #恢复完成

数据库恢复之后,启动数据库:

[root@test3 ~]# chown -R mysql:mysql /data/mysql/[root@test3 ~]# service mysqld start
Starting MySQL.. SUCCESS!

至此一个完全备份的数据恢复工作完成!

在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录,我们可以自定义备份集的名字如下:

[root@test3 ~]# innobackupex --user=root --password=123456 --no-timestamp /data/backup/test_`date +%F`  #指定备份集的名字[root@test3 ~]# cd /data/backup/[root@test3 backup]# ls           #查看备份集
 test_2018-11-28[root@test3 backup]#

有时候因为socket文件不在默认位置,可以使用--socket指定位置:

[root@test2 ~]# innobackupex --user=root --password="7abec53701c3eefb" --no-timestamp /data/backup/testdb181128 19:40:10 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".181128 19:40:10  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' as 'root'  (using password: YES).181128 19:40:10  version_check Connected to MySQL server181128 19:40:10  version_check Executing a version check against the server...181128 19:40:10  version_check Done.181128 19:40:10 Connecting to MySQL server host: localhost, user: root, password: set, port: 0, socket: (null)
Failed to connect to MySQL server: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2).[root@test2 ~]# innobackupex --user=root --password="7abec53701c3eefb" --no-timestamp --socket=/var/lib/mysql/mysql.sock  data/backup/testdb

 增量备份与恢复

增量备份时与全备一起结合使用的,因此这里我们会说明一个全部的过程。

1:首先对目前的数据库做一个全备

[root@test3 ~]# innobackupex --user=root --password= --no-timestamp /data/backup/full_backup
[root@test3 ~]# cd /data/backup/
[root@test3 backup]# ls                   #全部备份的文件
full_backup

2:对数据做一些修改,如下

mysql> use sbtest;              #创建了一张表,然后插入了两条记录Database changed
mysql> create table tb3(a varchar(5), sysTime datetime);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into tb3 select "aa", now();
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> insert into tb3 select "bb", now();
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> select * from tb3;+------+---------------------+
| a    | sysTime             |
+------+---------------------+
| aa   | 2018-11-29 09:14:00 |
| bb   | 2018-11-29 09:14:11 |
+------+---------------------+2 rows in set (0.00 sec)

3:开始增量备份

[root@test3 backup]# innobackupex --user=root --password= --no-timestamp --incremental /data/backup/incre1 --incremental-basedir=/data/backup/full_backup
--no-timestamp: 上面已经说过,自己定义备份集的名字
--incremental /data/backup/incre1 :参数说明这次备份时一个增量备份,后面的路径指定增量备份的目录
--incremental-basedir=/data/backup/full_backup :增量备份时基于全备的,这个参数就是说明本次的增量备份时基于那次的全备,指向全备的目录文件

查看增量备份的文件记录:

[root@test3 incre1]# cat xtrabackup_checkpoints
backup_type = incremental                 #备份类型
from_lsn = 13741583205                    #需要说明增量备份只能INNODB,xtrack存储引擎,备份是基于lsn的改变的! to_lsn = 13741590096last_lsn = 13741590105compact = 0recover_binlog_info = 0

备份完成之后,我们需要恢复操作,记得上面恢复第一步是什么?准备数据,也就是redo已经提交的事务,回滚未提交的事务。增量备份也是这样,但是操作有些不同。

把全备文件备份一下,把数据库二进制日志也保存一下:【这一步为了二进制增备恢复做准备】

[root@test3 backup]# cp -r  full_backup full_backup_bak
[root@test3 backup]# cp /data/mysql/test3-bin.000001 /data/backup/[root@test3 backup]# lsfull_backup  full_backup_bak  incre1  test3-bin.000001

恢复操作:

准备数据

~]# innobackupex  --apply-log --redo-only --use-memory=1G /data/backup/full_backup

--use-memory=1G #表示使用的内存大小

第二步:把增量备份在全备上面回放,也就是把增量备份附加到全备上。
 innobackupex --apply-log --redo-only /data/backup/full_backup --incremental-dir=/data/backup/incre1

:
1:准备全部备份,保证文件的一致性。
2:把所有的增量备份附加到全备备份上。如果有多个增量备份,则每一个增量备份文件都要执行附加操作。但是要注意顺序,可以查看增量备份的文件
 根据lsn来确定文件的顺序

开始恢复

[root@test3 ~~]#  -fr /data/mysql

特别提示:

若有多个增量备份,则每一个增量备份都要重放到全备的文件中,一定要注意重放增量备份时候的顺序,可以在xtrabackup_checkpoints文件中根据lsn的大小来判断文件的顺序。

利用二进制日志做增量恢复

上面innobackupex的增量恢复,有点不方便,若是要恢复到某个时间点,显得有点无能为力了!但是二进制日志可以,二进制日志可以恢复指定时间点。

在上面的插入数据中,我们插入两条数据,但是一个要求,我们只要恢复到2018-11-29 09:14:00的数据,也就是插入的第二条数据不需要了!

我们上面备份了全备和二进制日志,现在就可以使用了!

基于全备恢复所有的数据,然后根据二进制日志把数据库恢复到我们要的时间点!

#执行全部备份的恢复
[root@test3 ~  innobackupex  --apply-log /data/backup/
[root@test3 ~~]#   -fr /data/mysql/~]#  innobackupex --copy-back /data/backup/~]#   -~]#   -R mysql:mysql /data/mysql/~!~]# mysql -uroot - is .-, , Oracle and// or   help. Type  to >> sec)

 #执行基于二进制时间点的恢复

innobackupex备份的是,命令结束的时候的全部数据文件,可以在如下文件查看全备的时间信息:

#
[root@test3 mysql]# = e44e6a70-f373-11e8-a5cd-=== --user=root --password=... --no-timestamp /data/backup/= .= .= .-= -- ::= -- ::= = filename , position = = === ===-bin.

导出要恢复时间段的二进制日志文件:

我们要截取的日志时间段是从 全备结束 到 2018-11-29 09:14:00 这个时间点的文件。全备结束时间点作为起始点,起始点有两种确定方式,第一种上面文件中

的end_time指定的时间点;第二种二进制日志的position位置。这两种方式都可以。

 

[root@test3 mysql]# cd /data/backup/[root@test3 backup]# mysqlbinlog --start-datetime="2018-11-29 09:12:51" --stop-datetime="2018-11-29 09:14:00" test3-bin.000001 > /root/bak.sql
--start-datetime : 指定起始的时间点。
--stop-datetime:   指定结束的时间点。
--start-position:  指定二进制日志开始日志点。
--stop-position :  指定二进制日志结束的日志点。
上面四个参数可以配合使用

 

然后把上面导出sql文件导入到MySQL服务中。

mysql> set sql_log_bin=0;          #导入时,若文件较大会产生很多二进制日志文件,可以先把二进制日志文件关闭,

mysql> source bak.sql;             #导入文件,可以使用mysql直接导入

mysql> set sql_log_bin=1;           #导入完成之后,开启二进制日志文件

查看数据:

mysql> use sbtest;   #完了演砸了,但是数据库已经存在了,说明这种方法是正确的!
Database changed
mysql> select * from tb3;
Empty set (0.01 sec)

mysql> show tables;+------------------+
| Tables_in_sbtest |
+------------------+
| tb3              |
+------------------+1 row in set (0.00 sec)

查看一下二进制日志:

[root@test3 backup]# mysqlbinlog test3-bin.000001.......
#181129  9:13:47 server id 5  end_log_pos 1973 CRC32 0xcad0188f     Query    thread_id=13    exec_time=0    error_code=0SET TIMESTAMP=1543454027/*!*/;
create table tb3(a varchar(5), sysTime datetime)/*!*/;
# at 1973        #用时间截取的时候很可能是截取到了这个时间点就停止了,因此只有tb3这个表,没有后面的插入的第一条数据,因此我们选择用日志点截取数据#181129  9:14:00 server id 5  end_log_pos 2038 CRC32 0x670a3d93     Anonymous_GTID    last_committed=9    sequence_number=10    rbr_only=yes/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 2038#181129  9:14:00 server id 5  end_log_pos 2120 CRC32 0x6a82446d     Query    thread_id=13    exec_time=0    error_code=0SET TIMESTAMP=1543454040/*!*/;
BEGIN/*!*/;
# at 2120#181129  9:14:00 server id 5  end_log_pos 2172 CRC32 0x7c9e9e8c     Table_map: `sbtest`.`tb3` mapped to number 117# at 2172#181129  9:14:00 server id 5  end_log_pos 2216 CRC32 0xda4461be     Write_rows: table id 117 flags: STMT_END_F

BINLOG 'WD3/WxMFAAAANAAAAHwIAAAAAHUAAAAAAAEABnNidGVzdAADdGIzAAIPEgMFAAADjJ6efA==WD3/Wx4FAAAALAAAAKgIAAAAAHUAAAAAAAEAAgAC//wCYWGZoXqTgL5hRNo='/*!*/;# at 2216#181129  9:14:00 server id 5  end_log_pos 2247 CRC32 0x3b63c077     Xid = 92COMMIT/*!*/;# at 2247            #选择这个日志点#181129  9:14:11 server id 5  end_log_pos 2312 CRC32 0xbd634458     Anonymous_GTID    last_committed=10    sequence_number=11    rbr_only=yes/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 2312#181129  9:14:11 server id 5  end_log_pos 2394 CRC32 0xb5eba130     Query    thread_id=13    exec_time=0    error_code=0SET TIMESTAMP=1543454051/*!*/;
BEGIN/*!*/;
# at 2394#181129  9:14:11 server id 5  end_log_pos 2446 CRC32 0xfcaf0343     Table_map: `sbtest`.`tb3` mapped to number 117# at 2446#181129  9:14:11 server id 5  end_log_pos 2490 CRC32 0x080cd871     Write_rows: table id 117 flags: STMT_END_F

BINLOG 'Yz3/WxMFAAAANAAAAI4JAAAAAHUAAAAAAAEABnNidGVzdAADdGIzAAIPEgMFAAADQwOv/A==Yz3/Wx4FAAAALAAAALoJAAAAAHUAAAAAAAEAAgAC//wCYmKZoXqTi3HYDAg='/*!*/;# at 2490#181129  9:14:11 server id 5  end_log_pos 2521 CRC32 0x14fd7636     Xid = 93COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

用日志点重新导入一下:

mysqlbinlog --start-position=1227 --stop-position=2247 test3-bin.000001 > /root/bak.sql  #截取二进制日志

导入数据,查看数据:

mysql> source bak.sql;
mysql>>+------------------+
| Tables_in_sbtest |
+------------------+
| tb3              |
+------------------+ row  set (>  *+------+---------------------+
| a    | sysTime             |
+------+---------------------+
| aa   | -- :: |
+------+---------------------+ row  set ( sec)

 

 

增量备份有两种方法,一个是利用innobackupex的方式进行增量备份另一个是利用二进制日志进行增量备份;建议使用二进制日志增量备份!

我们公司的备份策略时,每一天凌晨全部备份,然后备份当天的二进制日志文件,这样就可以把数据恢复到任何一个时间点!

流压缩

上面备份的数据比较少,并没有考虑磁盘空间问题。下面我们来备份一个大库!

[root@test2 mariadb]# du -sh47G    .
#datadir的数据文件时47G,好吧也不是太大,能说明问题了!

查看备份之后的文件大小:

[root@test2 ~] innobackupex --user=root --password= --no-timestamp --socket=/var/lib/mysql/mysql.sock  /test/backup/testdb
[root@test2 ~]# cd /test/backup/
[root@test2 backup]# ls
testdb
[root@test2 backup]# du -sh     #可以看到备份的文件也是47G
47G    .
[root@test2 backup]# 

#innobackupex是逻辑备份,就是拷贝数据,因此备份文件和源文件的大小相差不大

引入流压缩:

[root@test2 backup]# innobackupex --user=root --password= --no-timestamp --socket=/var/lib/mysql/mysql.sock --stream= /tmp | -> testdb..gz

--stram=tar  : 指定标准输出格式,一种是tar,另一种是xbstream;xbstream是xtraceback提供的,解压的时候需要专用命令处理,考虑通用性,选择用tar!

/tmp         : 流格式标准输出,临时存放于/tmp目录下面

| gzip ->    : 通过管道把流格式输出传给gzip进行压缩

#压缩备份完之后,查看一下压缩之后文件的大小:
[root@test2 backup]# ll -h testdb.tar.gz 
-rw-r--r-- 1 root root  Nov 29 11:27 testdb.tar.gz

压缩之前文件是47个G
未压缩的备份文件是47个G,
压缩之后备份文件是18个G。

之前的使用流压缩备份出来的命令,解压时必须带上 “-i” 参数!

[root@test3 backup]#  -ixvf testdb..gz -C db/        !

-C :直接把解压的文件放到指定的目录中,在恢复时,我们可以直接放到datadir指定的目录当中、

[root@test3 backup]# tar -zxvf testdb.tar.gz -C db/        #!percona优化了很多参数

文件解压之后,然后需要准备文件也就是需要使用--apply-log选项,之后进行恢复就可以了!恢复过程可以参照上面的恢复过程!

percona还有一种压缩方式,官方文档给出的就是这种压缩方式:CLICK HERE!

~]# innobackupex --user=root --password= --socket= --no-timestamp --compress --compress-threads=  /test/backup/compress_db
--compress:开启压缩

--compress-threads=

在xtraceback2.1.4之前需要使用一个简短的shell来解压备份出来的文件,在2.1.4之后可以使用如下命令解压!

[root@test2 backup]# innobackupex --decompress /test/backup/compress_db/    181129 13:55:50 innobackupex: Starting the decrypt and decompress operation

IMPORTANT: Please check that the decrypt and decompress run completes successfully.
           At the end of a successful decrypt and decompress run innobackupex
           prints "completed OK!".

innobackupex version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)181129 13:55:50 [01] decompressing ./ibdata1.qpsh: qpress: command not foundcat: write error: Broken pipe
Error: thread 0 failed.
[root@test2 backup]# yum install -y qpress
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
base                                                                                                                                                 | 3.7 kB     00:00     epel                                                                                                                                                 | 4.4 kB     00:00     mariadb                                                                                                                                              | 2.9 kB     00:00     zabbix                                                                                                                                               | 2.9 kB     00:00     No package qpress available.       #这里报错了没有qpress这个命令,这个命令需要从percona官网下载!网络有点渣,随后补上!
Error: Nothing to do

compress压缩备份之后的数据是23个G,而流压缩备份是18个G,源文件大小是47个G!根据存储来说建议使用流压缩吧!

 

#备份指定的库,而不是全部的库!

MySQL备份与恢复-innobackupexMySQL备份与恢复-innobackupex

#!/bin/bash
#在备份指定库时,可以使用--include参数,也可以使用--tables-file参数,把指定的库写在文件中
User="root"Hostip=x.x.x.x
Passwd="x.x.x.x.x.x"Tbname="fi_repayplan.fi_reapyplan,fi_repayplan.fi_reapyplan_bank_once,fi_repayplan.fi_reapyplan_boc,fi_repayplan.fi_reapyplan_ccb,fi_repayplan.fi_reapyplan_irr,fi_repayplan.fi_reapyplan_irrmoney,fi_repayplan.fi_reapyplan_money,fi_repayplan.fi_reapyplan_once,fi_repayplan.fi_reapyplan_oncemoney"innobackupex --user=${User} --password=${Passwd} --host=${Hostip} --no-timestamp --include=${Tbname} --stream=tar /tmp | gzip > /data/fi_repayplan-`date +%F`.tar.gz

备份指定的库

 

#一个用于恢复的脚步

MySQL备份与恢复-innobackupexMySQL备份与恢复-innobackupex

#!/bin/badh
#Auth: wangxz
#需要把要解压的文件作为脚本执行的参数
#例如:sh huifu.sh xxx_2017-07-08_03-01-01.tar.gz
DB_DIR=/data/mariadb
DB_PORT=`netstat -lntp |grep 3306 | wc -l`
PROCESS_NUM=`ps aux |grep mysql |wc -l`
recover_log=/tmp/recover.log
print_str() ##打印说明信息
{    echo -e "------------\e[0;31;1m $1 \e[0m-------------------"    
    sleep 1}

check_ok()  ##一个检测函数
{    if [ $? != 0 ]; then
        print_str "Some error has happened"
        exit    else
        sleep 1
    fi}
##检测是否给出要解压的文件if [ $# !=  1 ]; then
    print_str "Please give a tar file"
    exitfi
 if [ $DB_PORT == 1 ] && [ $PROCESS_NUM == 3 ]; then
    print_str "It's stopping the mysql service"
    service mysql stop >> $recover_log
    check_ok    sleep 3fiif [ $DB_PORT == 0 ] && [ $PROCESS_NUM == 1 ]; then
    print_str "The mysql service is not running!"fi###清楚datadir目录
print_str "Delete the datadir"rm -fr $DB_DIR/*check_ok
sleep 3

###解压数据库
print_str "Start Uncompress the backup file"
tar -ixvf $1 -C $DB_DIR/>> $recover_log
check_ok
sleep 3 

###准备数据库备份
print_str "apply log the datadir"
innobackupex --apply-log $DB_DIR  >> $recover_log
check_ok
sleep 3

###修改权限
chown -R mysql:mysql $DB_DIR
sleep 3

###启动数据库
service mysql start >>$recover_log
check_ok
###检测是否启动成功
PROCESSLIST=`ps aux |grep mysql |wc -l`
PORT_NUM=`netstat -lntp |grep 3306 | wc -l`
if [ $PROCESSLIST -gt 1 ] && [ $PORT_NUM -le 1 ]; then
    print_str "the mysql service has started successfully!"
    rm -fr $recover_log
    check_ok
    print_str "The log was deleted successfully!"
else
    print_str  "Some unexcept things has happened"
fi

恢复脚本

 

上一篇:Xtrabackup备份与恢复


下一篇:XtraBackup 备份加速【转】