xtrabackup是一种物理备份工具,通过协议连接到mysql服务端,然后读取并复制innodb底层的"数据块",完成所谓的"物理备份"。
支持对innodb进行热备、增量备份、差量备份。
支持对myisam进行温备,因为在备份myisam表时,会对myisam表添加读锁,而且不能对myisam表进行增量备份,每次备份myisam数据都是全量,即使名义上是增量,但是实际上仍然是全量。
1、xtrabackup在启动后,会有两个线程,一个是redolog扫描线程,一个是innodb文件的ibd文件拷贝线程。redo日志线程总是在拷贝线程之前启动,早拷贝线程结束后结束。
2、ibd文件拷贝完成后通知主进程,告知拷贝完毕。
3、启动非innodb引擎的拷贝线程,加全局读锁。
4、非innodb引擎的文件拷贝完毕后,停止拷贝线程,然后停止redo线程,在停止redo线程之前,redo线程一直在拷贝,到最新的日志。
5、redo线程结束后,执行解锁表操作,进行收尾工作,备份结束。
yum -y update
mkdir /home/tools
cd /home/tools
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
#安装依赖包:
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5 rsync
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
注意:安装过程遇到libev.so.4问题
(1)解决 libev.so.4()(64bit)
可以自行去http://rpm.pbone.net搜索系统所需要的rpm包进行下载安装
wget ftp://ftp.pbone.net/mirror/apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
innobackupex使用方法
完整的选项使用请执行innobackupex --help,这里只介绍使用常用的选项进行完整备份及增量备份和还原。
innobackupex Options 这里只对常用参数进行描述
--defaults-file
数据库的配置文件路径,感觉本地备份不写也可以,远程没测试过。
--apply-log
准备在一个备份上启动mysql服务。
--copy-back
从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。
--no-timestamp
创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base
--databases
用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″
--incremental
在全备份的基础上进行增量备份,后跟增量备份存贮目录路径
--incremental-basedir=DIRECTORY
增量备份所需要的全备份路径目录或上次做增量备份的目录路径
--incremental-dir=DIRECTORY
增量备份存贮的目录路径
--redo-only
用于准备增量备份内容把数据合并到全备份目录,配合--incremental-dir 增量备份目录使用。
--force-non-empty-directories
如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。
#将备份的文件存放在/home/dsf下面
mkdir /home/dsf
innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' /home/dsf
##后面显示
#190914 18:20:26 completed OK!
#则证明备份成功
##备份遇到错误,找不到好的办法,只能指定数据库备份
InnoDB: Attempted to open a previously opened tablespace. Previous tablespace mysql/slave_relay_log_info at filepath: ./mysql/slave_relay_log_info.ibd uses space ID: 15. Cannot open filepath: ./dcpay_common_service/alert_group_subscription.ibd which uses the same space ID.
解决方法:(指定数据库备份)
innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --databases=dsf /home/dsf
##如果使用压缩备份,可以用
innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --databases= "dsf dsf2" --no-timestamp --stream=tar ./ | gzip > dsf-dsf2.tar.gz
1、恢复第一步:应用日志
innobackupex --defaults-file=/etc/my.cnf --apply-log /home/dsf/2019-09-14_18-00-54/
2、恢复第二步:拷贝文件
cd /home/deploy/mysql/
mv data/ data_old_0915
innobackupex --defaults-file=/etc/my.cnf --copy-back /home/dsf/2019-09-14_18-00-54/
chown -R mysql.mysql /home/deploy/mysql/
/etc/init.d/mysqld start
全量备份命令:
innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' /home/dsf
全量备份的目录为:
[root@mysql01 dsf]# ll
总用量 0
drwxr-x--- 6 root root 236 10月 11 14:42 2019-10-11_14-35-17
第一次增量备份:在全量备份上的基础进行增量备份:
innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --incremental /home/dsf --incremental-basedir=/home/dsf/2019-10-11_14-35-17/
第一次增量备份目录为:
2019-10-11_15-00-12
第二次增量备份:在增量备份的基础进行增量备份:
innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --incremental /home/dsf --incremental-basedir=/home/dsf/2019-10-11_15-00-12
1、应用全备日志
innobackupex --apply-log --redo-only --use-memory=8G /home/dsf/2019-10-11_14-35-17
2、应用第一次增量备份日志到全备
innobackupex --apply-log --redo-only --use-memory=8G /home/dsf/2019-10-11_14-35-17 --incremental-dir=/home/dsf/2019-10-11_15-00-12
3、应用第二次增量备份日志到全备,注意不加 --redo-only 参数(最后一次增量备份)
innobackupex --apply-log --use-memory=8G /home/dsf/2019-10-11_14-35-17 --incremental-dir=/home/dsf/2019-10-11_16-00-13
4、##如果最后一次应用增量备份日志到全备时不小心加了--redo-only参数。则把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据
innobackupex --apply-log --use-memory=8G /home/dsf/2019-10-11_14-35-17
/etc/init.d/mysqld stop
cd /home/deploy/mysql/
mv data/ data_old_1010
innobackupex --defaults-file=/etc/my.cnf --copy-back /home/dsf/2019-10-11_14-35-17
chown -R mysql.mysql /home/deploy/mysql/
/etc/init.d/mysqld start