XtraBackup是Percona公司CTO Vadim
参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份形式。
热备份流程图:
备份工具
mysqldump 可以对mysql/mariadb数据库进行全量备份(逻辑备份
)
xtrabackup 可以对mysql/mariadb数据库进行全量备份(物理备份
),增量备份(使用innodb引擎) 支持热备 (常用因为有事务)
XtraBackup
XtraBackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:
1 ) xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表,也不能备份数据表结构; 【myisam特点全文索引+方便迁移】
2 ) innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份。
3 ) xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 mysqld server 没有交互;
innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 mysqld server 发送命令进行交互,如加读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。简单来说innobackupex 在 xtrabackup 之上做了一层封装。
一般情况下,我们是希望能备份MyISAM表的。因为mysql库下的系统表是MyISAM的,所有备份基本都通过innobackupex命令进行;另外一个原因是我们可能需要保存位点信息。xbcrypt是加解密用的;xbstream类似于tar是 Percona 自己实现的一种支持并发写的流文件格式。
常用选项:
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--databases 指定数据库
--tables-file 指定含有表列表的文件
--incremental 创建增量备份
--incremental-basedir 指定包含完全备份的目录
--incremental-dir 指定包含增量备份的目录
--apply-log 对备份进行预处理操作
一般情况下,在备份完成后数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此此时数据文件仍处于不一致状态。
"准备"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件处于一致性状态。把已提交的事务合并到ibdata文件
--redo-only 不回滚未提交事务
--copy-back 恢复备份目录
特殊 --databases
:该选项接受的参数为数据库名。如果要指定多个数据库,彼此间需要以空格隔开;如:”xtra_test dba_test”,同时在指定某数据库时,也可以只指定其中的某张表。如:mydatabase.mytable。该选项对innodb引擎表无效,还是会备份所有innodb表。此外此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。
备份内容
✔ 使用innobackupex备份时其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份"触发器和数据库配置信息"相关的文件,这些文件会被保存到一个以时间命名的目录当中。
✔ 在备份的同时innobackupex还会在备份目录中创建如下文件:
(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目录来存储备份数据。
注意:备份时需启动MySQL,恢复时需关闭MySQL。清空mysql数据目录且不能重新初始化,恢复数据后应该立即进行一次完全备份
XtraBackup优点
(1)备份速度快,物理备份可靠
(2)备份过程不会打断正在执行的事务(无需锁表)
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动备份校验
(5)还原速度快
(6)可以流传将备份传输到另外一台机器上
(7)在不增加服务器负载的情况备份数据
实验步骤
前期准备
1.设置一下centos7的epel以及base源安装软件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install mariadb-server
yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum -y install percona-xtrabackup.x86_64
rpm -qa |grep xtrabackup
2.编辑配置文件
因为使用备份工具进行恢复数据时数据目录下要为空,所以需要把数据目录和日志目录分开
[root@localhost ~]# vim /etc/my.cnf
datadir=/var/lib/mysql/data # 更改数据库存储目录
3.创建目录修改属主属组
[root@localhost ~]# mkdir /var/lib/mysql/data
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql/data/
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# cd /var/log/mariadb/
[root@localhost mariadb]# ls
mariadb.log
[root@localhost mariadb]# cd
4.创建qq数据库
[root@localhost ~]# mysql -u root -p
Enter password:
MariaDB [(none)]> create database qq;
MariaDB [(none)]> exit
[root@localhost ~]# ls /var/lib/mysql/data/
aria_log.00000001 aria_log_control ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema qq test
全量备份
[root@localhost ~