广告
返回顶部
首页 > 资讯 > 数据库 >xtrabackup 实现MySQL数据库备份
  • 472
分享到

xtrabackup 实现MySQL数据库备份

摘要

mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的 数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用Mysqldump备份就不太适合了。 这时就 需要一种好用又高效的工具,xtr


	xtrabackup 实现MySQL数据库备份
[数据库教程]

mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的 数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用Mysqldump备份就不太适合了。 这时就 需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。 Xtrabackup实现是 物理备份,而且是物理热备 目前主流的有两个工具可以实现物理热备:ibbackup和xtrabackup;ibbackup是商 业软件,需要授权,非常昂贵。而xtrabackup功能比ibbackup还要强大,但却是开源的。因此我们这里就来介 绍xtrabackup的使用。 Xtrabackup提供了两种命令行工具: xtrabackup:专用于备份InnoDB和XtraDB引擎的 数据; innobackupex:这是一个perl脚本,在执行过程中会调用xtrabackup命令,这样用该命令即可以实现备 份InnoDB,也可以备份MyISAM引擎的对象。

Xtrabackup是由percona提供的mysql数据库备份工具,特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断 正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快。

1、安装xtrabackup

[[email protected] ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup2.4.4/binary/tarball/percona-xtrabackup-2.4.4-linux-x86_64.tar.gz               # 下载xtrabackup
#解压并进入目录复制
[[email protected] ~]# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz 
[[email protected] ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/
[[email protected] percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/
[[email protected] 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表类 型所占的比例越大,则越有利。

#安装相关插件
[[email protected] ~]# yum -y install  perl-DBI perl-DBD-Mysql perl-Time-HiRes perl-io-Socket-SSL perlTermReadKey.x86_64 perl-Digest-MD5
#下载percona-toolkit并安装
[[email protected] /]# wget Https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/perconatoolkit-2.2.19-1.noarch.rpm 
[[email protected] ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm 

就这样,xtrabackup工具就安装好了,接下来就可以开始备份了
方案一、xtrabackup完全备份+binlog增量备份
1、创建备份目录


[[email protected] ~]# mkdir -p /opt/mysqlbackup/{full,inc}
#full:全备存放的目录;inc:增量备份存放的目录 

1)、完全备份


[[email protected] ~]# 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/指定备份所存放的目标目录,备份过程会创建一个以当时备份时间命名的目录存放备份 文件。
出现如下图所示,则表示备份成功:

技术图片
在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件:

[[email protected] ~]# cd /opt/mysqlbackup/full/
[[email protected] full]# ll
total 0
drwxr-x--- 6 root root 206 Jun 15 22:35 2020-06-15_22-35-02
[[email protected] 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日志位置
[[email protected] 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‘);
[[email protected] data]# pwd
/usr/local/mysql/data
[[email protected] data]# mysqlbinlog -v bin_log.000001       # 可以通过mysqlbinlog二进制日志号
[[email protected] data]# cat /opt/mysqlbackup/full/2020-06-15_22-49-41/xtrabackup_binlog_info 
bin_log.000001  154            # 后面这个154 就是开始
#由于我全备之后还做了一些操作,所以我这里并不是154
#增量备份二进制文件
[[email protected] data]# mysqlbinlog --start-position=219 /usr/local/mysql/data/bin_log.000001 > /opt/mysqlbackup/inc/`date +%F`.sql
[[email protected] data]# ls /opt/mysqlbackup/inc/
2020-06-15.sql

2、还原数据库
#模拟数据库损坏, 我这里直接使用删除数据目录文件来模拟损坏。


[[email protected] ~]# rm -rf /usr/local/mysql/data/*
还原完全备份:
准备(prepare)一个完全备份 一般情况下,在备份完成后,数据尚且不能用于恢复操作, 因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文 件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得 数据文件处于一致性状态。 在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而 不是回滚到xtrabackup刚开始时的点。

[[email protected] ~]# 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)还原数据库语法:


[[email protected] ~]# innobackupex --copy-back /opt/mysqlbackup/full/2020-06-15_22-49-41/

这里的--copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常 启动。
如果执行正确,其输出信息的最后几行通常如下:
技术图片
请确保如上信息的最行一行出现“completed OK!”。 修改还原后的数据目录权限:


[[email protected] ~]# 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之前还需要事先修改数据文件的属主和属组。如:


[[email protected] ~]# chown -R mysql:mysql /usr/local/mysql/data/
[[email protected] ~]# 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
[[email protected] ~]# 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)

方案二、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‘);

1、 xtrabacup进行备份 执行完全备份:


[[email protected] ~]# 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)
#查看完全备份文件
[[email protected] ~]# 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‘);
[[email protected] ~]# 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_

部分显示信息如下图所示:
技术图片

#查看增量备份文件:
[[email protected] ~]# 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;
#接下来进行第二次增量备份
[[email protected] ~]# 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指向上一次增量备份文件的位置。


#查看增量备份文件
[[email protected] ~]# 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

2、 xtrabacup进行增量恢复 为了验证比对,先删除两个增量备份前表里面的数据


mysql> delete from tab1 where id=3;

完整备份恢复: 在进行恢复前,如果完整备份在远程主机上,首先将完整备份复制到本地主机上,如果是tar 包,则需要先解包,解包命令为:tar –izxf xxx.tar,这里必须使用-i参数(忽略存档中的 0 字节块(通常意味着 文件结束))。
开始全备份恢复 :


[[email protected] ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/

恢复成功如图所示:
技术图片
恢复到第一次增量的时刻 增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不 同。增量备份恢复时,是先将所有的增量备份挨个应用到完整备份的数据文件中,然后再将完整备份中的数据 恢复到数据库中。


[[email protected] ~]# 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/

如图所示:
技术图片
恢复到第二次增量备份前面:


[[email protected] ~]# 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/

如图所示:
技术图片
恢复整个库 :


[[email protected] ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --target-dir=/opt/mysqlbackup/full/full_incre_/

如图所示:
技术图片
停止mysql数据库:


[[email protected] ~]# systemctl stop mysqld

开始rsync同步数据文件:


[[email protected] full_incre_]# rsync -rvt --exclude ‘xtrabackup_checkpoints‘ --exclude ‘xtrabackup_logfile‘ ./ /usr/local/mysql/data/
#当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组。 
[[email protected] 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
[[email protected] data]# chown -R mysql:mysql /usr/local/mysql/data/
[[email protected] data]# systemctl restart mysqld
mysql> select * from tab1;
+------+------+
| id   | name |
+------+------+
|    1 | tom1 |
|    2 | tom2 |
|    3 | tom3 |
|    4 | tom4 |
+------+------+

方案三、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‘);

1、innobackupex先做完全备份


[[email protected] 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
#查看完全备份文件
[[email protected] data]# ls /opt/mysqlbackup/full/
full_incre_20200616_005156

做第一次增量备份 先录入增量数据


mysql> insert into tab1 values(3,‘lisi3‘);
#进行增强备份
[[email protected] 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
#查看增量备份文件
[[email protected] 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‘);
[[email protected] 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
#查看增量备份文件
[[email protected] 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 ;
#开始做恢复,恢复全备份
[[email protected] inc]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/
#--redo-only 用于准备增量备份内容把数据合并到全备份目录,配合incremental-dir 增量备份目录使用
#基于全备份进行第一次增量备份的恢复 
[[email protected] ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_005610/
#基于全备份和第一次增量备份,恢复第二次增量备份 
[[email protected] ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_010301/
#停止数据库
[[email protected] ~]# systemctl stop mysqld
#清空数据目录下所有文件

[[email protected] ~]# mkdir -p /tmp/mysqldatabak
[[email protected] ~]# mv /usr/local/mysql/data/* /tmp/mysqldatabak/
#将恢复好的数据按照配置文件的需求拷贝到相应目录
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123" --copy-back /opt/mysqlbackup/full/full_incre_20200616_005156/
#当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组
[[email protected] ~]# cd /usr/local/mysql/data/
[[email protected] 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
[[email protected] data]# chown -R mysql:mysql /usr/local/mysql/data/
#启动服务
[[email protected] 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 

xtrabackup 实现MySQL数据库备份

原文地址:https://blog.51cto.com/14306186/2511392

您可能感兴趣的文档:

--结束END--

本文标题: xtrabackup 实现MySQL数据库备份

本文链接: https://www.lsjlt.com/news/7250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • xtrabackup 实现MySQL数据库备份
    mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的 数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了。 这时就 需要一种好用又高效的工具,xtr...
    99+
    2018-06-08
    xtrabackup 实现MySQL数据库备份 数据库入门 数据库基础教程 数据库 mysql
  • Xtrabackup备份mysql数据库
    Xtrabackup由percona提供percona Xtrabackup是一个自由、开源的完整的在线备份工具,支持mysql、perconna server、mariadb到官网https://www....
    99+
    2022-10-18
  • 使用XtraBackup 备份MySQL数据库
    本次测试使用XtraBackup备份MySQL数据库版本:XtraBackup2.4.5+MySQL5.7.16下载地址:https://www.percona.com/downloads/XtraBack...
    99+
    2022-10-18
  • xtrabackup如何备份mysql数据库
    参考:http://mingxiao.blog.51cto.com/8124243/1623634一 全备1.命令安装:yum install -y gnupg rpm&nbs...
    99+
    2022-10-18
  • xtrabackup备份恢复MySQL数据库
    1. 全量备份恢复: 查看原表内容: MariaDB [(none)]> select * from testdb.students; +----+------------+------...
    99+
    2022-10-18
  • 使用xtrabackup备份MySQL数据库
    前言 Xtrabackup提供了两种命令行工具: xtrabackup:专用于备份InnoDB和XtraDB引擎的数据; innobackupex:是一个perl脚本,在执行过程中会调用xtraback...
    99+
    2022-10-18
  • Xtrabackup备份数据库
    Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。   Xtr...
    99+
    2022-10-18
  • 使用xtrabackup工具实现对MySQL数据库备份
    下文给大家带来有关使用xtrabackup工具实现对MySQL数据库备份内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完使用xtrabackup工具实现对MySQ...
    99+
    2022-10-18
  • XtraBackup 备份还原 MySQL 5.6 数据库
    下载XtraBackup:# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.6/binary/tarbal...
    99+
    2022-10-18
  • xtrabackup备份msyql数据库
     简介:Xtrabackup是由percona提供的mysql数据库备份工具,可以对Innodb数据库做热备特点:(1)备份过程快速、可靠(2)备份过程不会打断正在执行的事务(3)能够基于压缩等功...
    99+
    2022-10-18
  • xtrabackup进行MySQL数据库备份/还原
    http://hongge.blog.51cto.com/使用xtrabackup进行MySQL数据库备份前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于5...
    99+
    2022-10-18
  • 如何配置xtrabackup备份mysql数据库
    这篇文章将为大家详细讲解有关如何配置xtrabackup备份mysql数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1    安装yum源:yu...
    99+
    2022-10-18
  • mysql数据库xtrabackup压缩备份测试
         网上有篇文章为:TB级mysql数据之xtrabackup压缩备份迁移方案,今天自己亲测下,看看效果。结论在最后给出。简单介绍下环境: win7下安装的vmware ...
    99+
    2022-10-18
  • 如何使用Xtrabackup备份MySQL数据库
    这篇文章将为大家详细讲解有关如何使用Xtrabackup备份MySQL数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文则演示如何从xtrabackup的备份中进行...
    99+
    2022-10-18
  • 怎么使用Xtrabackup备份MySQL数据库
    这篇文章主要为大家展示了“怎么使用Xtrabackup备份MySQL数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么使用Xtrabackup备份MySQ...
    99+
    2022-10-18
  • XtraBackup备份还原MySQL数据库的过程
    本篇内容介绍了“XtraBackup备份还原MySQL数据库的过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-18
  • XtraBackup MySql 数据备份和恢复
    wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/6/x86_64/percona-xtrabackup-24...
    99+
    2017-01-22
    XtraBackup MySql 数据备份和恢复
  • mariadb数据库 xtrabackup 备份工具
    XtraBackup备份工具三步骤 1.安装XtraBackup软件包。 2.使用XtraBackup执行完整备份、增量备份。 3.准备数据恢复目录。 需要yum -y install perl-DBD-M...
    99+
    2022-10-18
  • xtrabackup全量、增量备份恢复mysql数据库
    一. 全量备份恢复: 查看原表内容: MariaDB [(none)]> select * from testdb.students; +----+------------+------...
    99+
    2022-10-18
  • Xtrabackup实现数据的备份与恢复
    Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysq...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作