Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。
Xtrabackup优点
1)备份速度快,物理备份可靠
2)备份过程不会打断正在执行的事务(无需锁表)
3)能够基于压缩等功能节约磁盘空间和流量
4)自动备份校验
5)还原速度快
6)可以流传将备份传输到另外一台机器上
Xtrabackup原理
Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup
1)xtrabackup 是专门用来备份InnoDB表的,不能备份非Innodb表,和mysql server没有交互;
2)innobackupex 是一个脚本,用来备份非InnoDB表,同时会调用xtrabackup命令来备份InnoDB表,还会和mysql server交互,比如锁表、获取位置点等。简单地说,就是在xtrabackup基础上做了一层封装;
3)xbcrypt 加密解密备份工具
4)xbstream 流传打包传输工具,类似tar
1)在使用InnoDB引擎表内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改
2)xtrabackup在启动时会记住log sequence number(LSN)日志序列号,即当前的redo记录的位置,并且复制所有数据文件
3)复制过程需要一些时间,所以这期间如果数据文件LSN有改动,它会运行一个后台进程,用于监控事务日志,并不停地将事务日志中每个数据文件的修改都记下来
Xtrabackup安装
官网下载Xtrabackup
1 ##https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.5/binary/RedHat/6/x86_64/percona-xtrabackup-2.3.5-1.el6.x86_64.rpm
搜索下载几个依赖rpm包
##
perl-DBI-1.609-4.el6.x86_64.rpm
perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
libev-4.04-2.el6.x86_64.rpm
安装完成后检查rpm包安装情况
[root@db02 tools]# rpm -ivh percona-xtrabackup-2.3.5-1.el6.x86_64.rpm
warning: percona-xtrabackup-2.3.5-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing... ########################################### [100%]
1:percona-xtrabackup ########################################### [100%]
[root@db02 tools]# rpm -qa|grep xtrabackup
percona-xtrabackup-2.3.5-1.el6.x86_64
[root@db02 tools]# rpm -ql percona-xtrabackup-2.3.5-1.el6.x86_64
/usr/bin/innobackupex #innobackupex脚本工具
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup #最主要的备份工具
/usr/share/doc/percona-xtrabackup-2.3.5
/usr/share/doc/percona-xtrabackup-2.3.5/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
先对数据库做一个全量备份
[root@db02 data]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=li123456 /backup/full/
...
60710 08:24:47 [00] Writing backup-my.cnf
160710 08:24:47 [00] ...done
160710 08:24:47 [00] Writing xtrabackup_info
160710 08:24:47 [00] ...done
xtrabackup: Transaction log of lsn (1672995) to (1672995) was copied.
160710 08:24:47 completed OK!
此时可以看到/backup/full已经有了备份过来的数据文件
[root@db02 full]# cd /backup/full/2016-07-10_08-24-43/
[root@db02 2016-07-10_08-24-43]# ll
总用量 131108
-rw-r----- 1 root root 387 7月 10 08:24 backup-my.cnf
-rw-r----- 1 root root 134217728 7月 10 08:24 ibdata1
drwx------ 2 root root 4096 7月 10 08:24 lichengbing
drwx------ 2 root root 4096 7月 10 08:24 lilongzi
drwx------ 2 root root 4096 7月 10 08:24 mysql
drwx------ 2 root root 4096 7月 10 08:24 performance_schema
-rw-r----- 1 root root 21 7月 10 08:24 xtrabackup_binlog_info
-rw-r----- 1 root root 113 7月 10 08:24 xtrabackup_checkpoints #记录LSN号文件
-rw-r----- 1 root root 503 7月 10 08:24 xtrabackup_info
-rw-r----- 1 root root 2560 7月 10 08:24 xtrabackup_logfile
[root@db02 2016-07-10_08-24-43]# cat xtrabackup_checkpoints
backup_type = full-backuped #备份类型为全备
from_lsn = 0 #起始LSN号(由于是全备所以起始LSN号为0开始)
to_lsn = 1672995 #截止LSN号
last_lsn = 1672995
compact = 0
recover_binlog_info = 0