mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的 数据库而言,这个速度仍是能接受的,但若是数据库很是大,那再使用mysqldump备份就不太适合了。 这时就 须要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。 Xtrabackup实现是 物理备份,并且是物理热备 目前主流的有两个工具能够实现物理热备:ibbackup和xtrabackup;ibbackup是商 业软件,须要受权,很是昂贵。而xtrabackup功能比ibbackup还要强大,但倒是开源的。所以咱们这里就来介 绍xtrabackup的使用。 Xtrabackup提供了两种命令行工具: xtrabackup:专用于备份InnoDB和XtraDB引擎的 数据; innobackupex:这是一个perl脚本,在执行过程当中会调用xtrabackup命令,这样用该命令便可以实现备 份InnoDB,也能够备份MyISAM引擎的对象。 mysql
Xtrabackup是由percona提供的mysql数据库备份工具,特色:
(1)备份过程快速、可靠;
(2)备份过程不会打断 正在执行的事务;
(3)可以基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快。sql
一、安装xtrabackup数据库
[root@mysql ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz # 下载xtrabackup #解压并进入目录复制 [root@mysql ~]# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz [root@mysql ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/ [root@mysql percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/ [root@mysql percona-xtrabackup-2.4.4-Linux-x86_64]# ls bin/
Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,支持在线热备 份,能够在不加锁的状况下备份Innodb数据表,不过此工具不能操做Myisam引擎表; innobackupex:是将 xtrabackup进行封装的perl脚本,能同时处理Innodb和Myisam,但在处理Myisam时须要加一个读锁。 因为操 做Myisam时须要加读锁,这会堵塞线上服务的写操做,而Innodb没有这样的限制,因此数据库中Innodb表类 型所占的比例越大,则越有利。 服务器
#安装相关插件 [root@mysql ~]# yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perlTermReadKey.x86_64 perl-Digest-MD5 #下载percona-toolkit并安装 [root@mysql /]# wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/perconatoolkit-2.2.19-1.noarch.rpm [root@mysql ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm
就这样,xtrabackup工具就安装好了,接下来就能够开始备份了
方案1、xtrabackup彻底备份+binlog增量备份
一、建立备份目录app
[root@mysql ~]# mkdir -p /opt/mysqlbackup/{full,inc} #full:全备存放的目录;inc:增量备份存放的目录
1)、彻底备份ide
[root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 /opt/mysqlbackup/full/
注: --defaults-file=/etc/my.cnf 指定mysql的配置文件my.cfg,若是指定则必须是第一个参数。 /path/to/BACKUP-DIR/指定备份所存放的目标目录,备份过程会建立一个以当时备份时间命名的目录存放备份 文件。
出现以下图所示,则表示备份成功:
在备份的同时,备份数据会在备份目录下建立一个以当前日期时间为名字的目录存放备份文件:工具
[root@mysql ~]# cd /opt/mysqlbackup/full/ [root@mysql full]# ll total 0 drwxr-x--- 6 root root 206 Jun 15 22:35 2020-06-15_22-35-02 [root@mysql full]# ll 2020-06-15_22-35-02/ total 12336 -rw-r----- 1 root root 425 Jun 15 22:35 backup-my.cnf -rw-r----- 1 root root 338 Jun 15 22:35 ib_buffer_pool -rw-r----- 1 root root 12582912 Jun 15 22:35 ibdata1 drwxr-x--- 2 root root 4096 Jun 15 22:35 mysql drwxr-x--- 2 root root 8192 Jun 15 22:35 performance_schema drwxr-x--- 2 root root 8192 Jun 15 22:35 sys drwxr-x--- 2 root root 50 Jun 15 22:35 test1 -rw-r----- 1 root root 113 Jun 15 22:35 xtrabackup_checkpoints -rw-r----- 1 root root 459 Jun 15 22:35 xtrabackup_info -rw-r----- 1 root root 2560 Jun 15 22:35 xtrabackup_logfile
各文件说明:
(1)xtrabackup_checkpoints ——备份类型(如彻底或增量)、备份状态(如是否已经为prepared 状态)和LSN(日志序列号)范围信息; 每一个InnoDB页(一般为16k大小)都会包含一个日志序列号,即LSN。LSN是 整个数据库系统的系统版本号,每一个页面相关的LSN可以代表此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事 件的位置。
(3)xtrabackup_binlog_pos_innodb ——二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前 position。
(4)xtrabackup_binary ——备份中用到的xtrabackup的可执行文件;
(5)backup-my.cnf ——备份命令用到的配置选项信息; 测试
在使用innobackupex进行备份时,还可使用--no-timestamp选项来阻止命令自动建立一个以时间命名的目 录;如此一来,innobackupex命令将会建立一个BACKUP-DIR目录来存储备份数据 插件
注意:相关选项说明: 其中,--user指定链接数据库的用户名,--password指定链接数据库的密码,-defaults-file指定数据库的配置文件,innobackupex要从其中获取datadir等信息;--database指定要备份 的数据库,这里指定的数据库只对MyISAM表有效,对于InnoDB 数据来讲都是全备(全部数据库中的 InnoDB数据都进行了备份,不是只备份指定的数据库,恢复时也同样);/opt/mysqlbackup/full是备份 文件的存放位置。命令行
注:备份数据库的用户须要具备相应权限,若是要使用一个最小权限的用户进行备份,则可基于以下 命令建立此类用户:
#建立用户 mysql> create user 'bkpuser'@'localhost' identified by '123456'; #回收用户全部权限 mysql> revoke all privileges,grant option from 'bkpuser'@'localhost'; #受权有关备份的相应权限 mysql> grant reload,lock tables,replication client, process on *.* to 'bkpuser'@'localhost'; mysql> flush privileges;
至此全备彻底成功,而后向mysql某个库插入几条数据,而后进行增量备份 对彻底备份的后数据库更改进行二 进制日志增量备份:
#查看彻底备份时binlog日志位置 [root@mysql full]# cat /opt/mysqlbackup/full/2020-06-15_22-49-41/xtrabackup_binlog_info bin_log.000001 154 #模拟数据库修改: mysql>select * from tb1; +------+----------+--------+ | id | name | back | |------+----------+--------| | 1 | zhangsan | w | | 2 | lisi | q | | 3 | wangwu | e | | 4 | zhaoliu | r | | 5 | liuyi | t | | 6 | didi | y | +------+----------+--------+ 6 rows in set mysql>insert into tb1 values(7,'tom','u'); mysql>insert into tb1 values(8,'tom2','i');
[root@mysql data]# pwd /usr/local/mysql/data [root@mysql data]# mysqlbinlog -v bin_log.000001 # 能够经过mysqlbinlog二进制日志号 [root@mysql data]# cat /opt/mysqlbackup/full/2020-06-15_22-49-41/xtrabackup_binlog_info bin_log.000001 154 # 后面这个154 就是开始 #因为我全备以后还作了一些操做,因此我这里并非154 #增量备份二进制文件 [root@mysql data]# mysqlbinlog --start-position=219 /usr/local/mysql/data/bin_log.000001 > /opt/mysqlbackup/inc/`date +%F`.sql [root@mysql data]# ls /opt/mysqlbackup/inc/ 2020-06-15.sql
二、还原数据库
#模拟数据库损坏, 我这里直接使用删除数据目录文件来模拟损坏。
[root@mysql ~]# rm -rf /usr/local/mysql/data/*
还原彻底备份:
准备(prepare)一个彻底备份 通常状况下,在备份完成后,数据尚且不能用于恢复操做, 由于备份的数据中可能会包含还没有提交的事务或已经提交但还没有同步至数据文件中的事务。所以,此时数据文 件仍处理不一致状态。“准备”的主要做用正是经过回滚未提交的事务及同步已经提交的事务至数据文件也使得 数据文件处于一致性状态。 在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而 不是回滚到xtrabackup刚开始时的点。
[root@mysql ~]# innobackupex --apply-log /opt/mysqlbackup/full/2020-06-15_22-49-41/
注:/opt/mysqlbackup/full/2020-06-15_22-49-41/ 备份文件所在目录名称 若是执行正确,其最后输出的几行信 息一般以下:
在实现“准备”的过程当中,innobackupex一般还可使用--use-memory选项来指定其可使用的内存的大小,默 认一般为100M。若是有足够的内存可用,能够多划分一些内存给prepare的过程,以提升其完成速度。 innobackupex命令的--copy-back选项用于执行恢复操做,其经过复制全部数据相关的文件至mysql服务器 DATADIR目录中来执行恢复过程。innobackupex经过backup-my.cnf来获取DATADIR目录的相关信息。
(2)还原数据库语法:
[root@mysql ~]# innobackupex --copy-back /opt/mysqlbackup/full/2020-06-15_22-49-41/
这里的--copy-back指明是进行数据恢复。数据恢复完成以后,须要修改相关文件的权限mysql数据库才能正常 启动。
若是执行正确,其输出信息的最后几行一般以下:
请确保如上信息的最行一行出现“completed OK!”。 修改还原后的数据目录权限:
[root@mysql ~]# ll /usr/local/mysql/data/ total 122916 -rw-r----- 1 root root 357 Jun 15 23:36 ib_buffer_pool -rw-r----- 1 root root 12582912 Jun 15 23:36 ibdata1 -rw-r----- 1 root root 50331648 Jun 15 23:36 ib_logfile0 -rw-r----- 1 root root 50331648 Jun 15 23:36 ib_logfile1 -rw-r----- 1 root root 12582912 Jun 15 23:36 ibtmp1 drwxr-x--- 2 root root 4096 Jun 15 23:36 mysql drwxr-x--- 2 root root 8192 Jun 15 23:36 performance_schema drwxr-x--- 2 root root 8192 Jun 15 23:36 sys drwxr-x--- 2 root root 50 Jun 15 23:36 test1 -rw-r----- 1 root root 504 Jun 15 23:36 xtrabackup_info
当数据恢复至DATADIR目录之后,还须要确保全部数据文件的属主和属组均为正确的用户,如mysql,不然,在 启动mysqld以前还须要事先修改数据文件的属主和属组。如:
[root@mysql ~]# chown -R mysql:mysql /usr/local/mysql/data/ [root@mysql ~]# ll /usr/local/mysql/data/ total 122916 -rw-r----- 1 mysql mysql 357 Jun 15 23:36 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 Jun 15 23:36 ibdata1 -rw-r----- 1 mysql mysql 50331648 Jun 15 23:36 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 Jun 15 23:36 ib_logfile1 -rw-r----- 1 mysql mysql 12582912 Jun 15 23:36 ibtmp1 drwxr-x--- 2 mysql mysql 4096 Jun 15 23:36 mysql drwxr-x--- 2 mysql mysql 8192 Jun 15 23:36 performance_schema drwxr-x--- 2 mysql mysql 8192 Jun 15 23:36 sys drwxr-x--- 2 mysql mysql 50 Jun 15 23:36 test1 -rw-r----- 1 mysql mysql 504 Jun 15 23:36 xtrabackup_info [root@mysql ~]# systemctl restart mysqld #验证还原后的数据 mysql> select * from tb1; +------+----------+------+ | id | name | back | +------+----------+------+ | 1 | zhangsan | w | | 2 | lisi | q | | 3 | wangwu | e | | 4 | zhaoliu | r | | 5 | liuyi | t | | 6 | didi | y | +------+----------+------+ 6 rows in set (0.00 sec)
(3)还原增量备份:
为了防止还原时产生大量的二进制日志,在还原时可临时关闭二进制日志后再还原:
mysql> set sql_log_bin=0; mysql> source /opt/mysqlbackup/inc/2020-06-15.sql
也能够在命令行执行以下语句
mysql –uroot –p < /opt/mysqlbackup/inc/2020-06-15.sql mysqlbinlog /opt/mysqlbackup/inc/2020-06-15.sql | mysql –uroot -p
从新启动二进制日志并验证还原数据:
mysql> set sql_log_bin=1; mysql> select * from tb1; # 能够看到两个tom已经回来了 +------+----------+------+ | id | name | back | +------+----------+------+ | 1 | zhangsan | w | | 2 | lisi | q | | 3 | wangwu | e | | 4 | zhaoliu | r | | 5 | liuyi | t | | 6 | didi | y | | 7 | tom | u | | 8 | tom2 | i | +------+----------+------+ 8 rows in set (0.00 sec)
方案2、xtrabackup彻底备份+xtrabacup增量备份
前面咱们进行增量备份时,使用的仍是老方法:备份二进制日志。其实xtrabackup还支持进行增量备份。 先介 绍下xtrabackup的备份原理 在InnoDB内部会维护一个redo日志文件,咱们也能够叫作事务日志文件 (transaction log,事务日志)。事务日志会存储每个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB 会检查数据文件和事务日志,并执行两个步骤:它应用已经提交的事务日志到数据文件,并将修改过但没有提 交的数据进行回滚操做。 xtrabackup在启动时会记住log sequence number(LSN),而且复制全部的数据文 件。复制过程须要一些时间,因此这期间若是数据文件有改动,那么将会使数据库处于一个不一样的时间点。这 时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。xtrabackup必须持 续的作这个操做,是由于事务日志是会轮转重复的写入,而且事务日志能够被重用。因此xtrabackup自启动开 始,就不停的将事务日志中每一个数据文件的修改都记录下来。这就是xtrabackup的备份过程 因此每一个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增加。 这正是InnoDB表能够进行增量备份的基础。 xtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的 data file,因为不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。 当InnoDB启动的时候,它会先去检查data file和transaction log,而且会作二步操做:
1.It applies committed transaction logentries to the data files
2.it performs an undo operation on anytransactions that modified data but did not commit. 因此在prepare过程当中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery。
准备测试环境,建立一个测试数据库,并建立一张表输入几行数据
mysql> create database test2; mysql> use test2; mysql> create table tab1(id int,name varchar(20)); mysql> insert into tab1 values(1,'tom1'); mysql> insert into tab1 values(2,'tom2');
一、 xtrabacup进行备份 执行彻底备份:
[root@mysql ~]# xtrabackup --default-file=/etc/my.cnf --user=root --password="123" --port=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date+%Y-%m-%d_%H:%M:%S) #查看彻底备份文件 [root@mysql ~]# ls /opt/mysqlbackup/full/ -l total 0 drwxr-x--- 6 root root 288 Jun 15 23:33 2020-06-15_22-49-41 drwxr-x--- 7 root root 249 Jun 15 23:56 full_incre_ #xtrabackup进行增量备份 先录入些数据,实现第一次增量数据: mysql> use test2; mysql> insert into tab1 values(3,'tom3'); [root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_
部分显示信息以下图所示:
#查看增量备份文件: [root@mysql ~]# ls -l /opt/mysqlbackup/inc/ total 8 drwxr-x--- 7 root root 275 Jun 16 00:04 incre_20200616_000403 #这里的增量备份其实只针对的是InnoDB,对于MyISAM来讲,仍是完整备份。 #向表中再插入几行数据,继续第二次增量备份 mysql> insert into tab1 values (4,'tom4'); mysql> commit; #接下来进行第二次增量备份 [root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20200616_000403
以下图所示:
注:第二次增量备份--incremental-basedir指向上一次增量备份文件的位置。
注:第二次增量备份--incremental-basedir指向上一次增量备份文件的位置。
注:第二次增量备份--incremental-basedir指向上一次增量备份文件的位置。
#查看增量备份文件 [root@mysql ~]# ls -l /opt/mysqlbackup/inc/ total 8 drwxr-x--- 7 root root 275 Jun 16 00:04 incre_20200616_000403 drwxr-x--- 7 root root 275 Jun 16 00:08 incre_20200616_000826
二、 xtrabacup进行增量恢复 为了验证比对,先删除两个增量备份前表里面的数据
mysql> delete from tab1 where id=3;
完整备份恢复: 在进行恢复前,若是完整备份在远程主机上,首先将完整备份复制到本地主机上,若是是tar 包,则须要先解包,解包命令为:tar –izxf xxx.tar,这里必须使用-i参数(忽略存档中的 0 字节块(一般意味着 文件结束))。
开始全备份恢复 :
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/
恢复成功如图所示:
恢复到第一次增量的时刻 增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不 同。增量备份恢复时,是先将全部的增量备份挨个应用到完整备份的数据文件中,而后再将完整备份中的数据 恢复到数据库中。
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_000403/
如图所示:
恢复到第二次增量备份前面:
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_000826/
如图所示:
恢复整个库 :
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --target-dir=/opt/mysqlbackup/full/full_incre_/
如图所示:
中止mysql数据库:
[root@mysql ~]# systemctl stop mysqld
开始rsync同步数据文件:
[root@mysql full_incre_]# rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /usr/local/mysql/data/
#当数据恢复至DATADIR目录之后,还须要确保全部数据文件的属主和属组均为正确的用户,如mysql,不然,在 启动mysqld以前还须要事先修改数据文件的属主和属组。 [root@mysql data]# ll total 122972 -rw-r----- 1 mysql mysql 56 Jun 15 23:38 auto.cnf -rw-r----- 1 root root 425 Jun 15 23:56 backup-my.cnf -rw-r----- 1 mysql mysql 177 Jun 15 23:38 bin_log.000001 -rw-r----- 1 mysql mysql 177 Jun 15 23:40 bin_log.000002 -rw-r----- 1 mysql mysql 1847 Jun 16 00:42 bin_log.000003 -rw-r----- 1 mysql mysql 111 Jun 15 23:41 bin_log.index -rw-r----- 1 root root 298 Jun 15 23:56 ib_buffer_pool -rw-r----- 1 root root 12582912 Jun 16 00:19 ibdata1 -rw-r----- 1 root root 50331648 Jun 16 00:19 ib_logfile0 -rw-r----- 1 root root 50331648 Jun 16 00:19 ib_logfile1 -rw-r----- 1 root root 12582912 Jun 16 00:19 ibtmp1 drwxr-x--- 2 mysql mysql 4096 Jun 16 00:18 mysql -rw-r----- 1 mysql mysql 22460 Jun 16 00:42 mysql.err drwxr-x--- 2 mysql mysql 8192 Jun 16 00:18 performance_schema drwxr-x--- 2 mysql mysql 8192 Jun 16 00:18 sys drwxr-x--- 2 mysql mysql 50 Jun 16 00:18 test1 drwxr-x--- 2 mysql mysql 52 Jun 16 00:18 test2 -rw-r----- 1 root root 20 Jun 16 00:18 xtrabackup_binlog_info -rw-r--r-- 1 root root 20 Jun 16 00:19 xtrabackup_binlog_pos_innodb -rw-r----- 1 root root 628 Jun 16 00:18 xtrabackup_info [root@mysql data]# chown -R mysql:mysql /usr/local/mysql/data/ [root@mysql data]# systemctl restart mysqld mysql> select * from tab1; +------+------+ | id | name | +------+------+ | 1 | tom1 | | 2 | tom2 | | 3 | tom3 | | 4 | tom4 | +------+------+
方案3、innobackupex全库备份+innobackupex增量备份
测试环境准备建立一个测试数据库,并建立一张表输入几行数据
mysql> create database test3; mysql> use test3; mysql> create table tab1(id int,name varchar(20)); mysql> insert into tab1 values(1,'lisi1'); mysql> insert into tab1 values(2,'lisi2');
一、innobackupex先作彻底备份
[root@mysql data]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123" /opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp #查看彻底备份文件 [root@mysql data]# ls /opt/mysqlbackup/full/ full_incre_20200616_005156
作第一次增量备份 先录入增量数据
mysql> insert into tab1 values(3,'lisi3'); #进行加强备份 [root@mysql data]# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20200616_005156 --user=root --password="123" --no-timestamp #查看增量备份文件 [root@mysql data]# ll /opt/mysqlbackup/inc/ drwxr-x--- 8 root root 288 Jun 16 00:56 incre_20200616_005610
基于全备和第一个增量备份来作第二次增量备份 先录入增量数据录入
mysql> insert into tab1 values(4,'lisi4'); [root@mysql inc]# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20200616_005610/ --user=root --password="123" --no-timestamp #查看增量备份文件 [root@mysql inc]# ll total 8 drwxr-x--- 8 root root 288 Jun 16 00:56 incre_20200616_005610 drwxr-x--- 8 root root 288 Jun 16 01:03 incre_20200616_010301
#**先删除两次增量数据,用来查看验证恢复结果** mysql> delete from tab1 ; #开始作恢复,恢复全备份 [root@mysql inc]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ #--redo-only 用于准备增量备分内容把数据合并到全备份目录,配合incremental-dir 增量备份目录使用 #基于全备份进行第一次增量备份的恢复 [root@mysql ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_005610/ #基于全备份和第一次增量备份,恢复第二次增量备份 [root@mysql ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_010301/
#中止数据库 [root@mysql ~]# systemctl stop mysqld
#清空数据目录下全部文件 [root@mysql ~]# mkdir -p /tmp/mysqldatabak [root@mysql ~]# mv /usr/local/mysql/data/* /tmp/mysqldatabak/
#将恢复好的数据按照配置文件的需求拷贝到相应目录 [root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123" --copy-back /opt/mysqlbackup/full/full_incre_20200616_005156/
#当数据恢复至DATADIR目录之后,还须要确保全部数据文件的属主和属组均为正确的用户,如mysql,不然,在 启动mysqld以前还须要事先修改数据文件的属主和属组 [root@mysql ~]# cd /usr/local/mysql/data/ [root@mysql data]# ll total 12328 -rw-r----- 1 root root 298 Jun 16 01:12 ib_buffer_pool -rw-r----- 1 root root 12582912 Jun 16 01:12 ibdata1 drwxr-x--- 2 root root 4096 Jun 16 01:12 mysql drwxr-x--- 2 root root 8192 Jun 16 01:12 performance_schema drwxr-x--- 2 root root 8192 Jun 16 01:12 sys drwxr-x--- 2 root root 50 Jun 16 01:12 test1 drwxr-x--- 2 root root 52 Jun 16 01:12 test2 drwxr-x--- 2 root root 52 Jun 16 01:12 test3 -rw-r----- 1 root root 20 Jun 16 01:12 xtrabackup_binlog_pos_innodb -rw-r----- 1 root root 598 Jun 16 01:12 xtrabackup_info [root@mysql data]# chown -R mysql:mysql /usr/local/mysql/data/ #启动服务 [root@mysql data]# systemctl restart mysqld
登陆mysql界面,查看数据是否已经恢复
mysql> select * from tab1; +------+-------+ | id | name | +------+-------+ | 1 | lisi1 | | 2 | lisi2 | | 3 | lisi3 | | 4 | lisi4 | +------+-------+ 4 rows in set (0.00 sec)
Xtrabackup的“流”及“备份压缩”功能 Xtrabackup对备份的数据文件支持“流”功能,便可以将备份的数据经过 STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅须要使用-stream选项便可。
# innobackupex --user=root --password="123" --stream=tar /opt/mysqlbackup/full/ | gzip >/opt/mysqlbackup/full/full_`date +%F_%H%M%S`.tar.gz