2018/05/02

xtrabackup


xtrabackup 源码安装

可以前往 github xtrabackup 下载,也可以前往 官网下载

解压安装包
tar zxvf percona-xtrabackup-2.4.11.tar.gz && cd percona-xtrabackup-2.4.11

安装依赖
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bison libtool ncurses-devel libgcrypt-devel libev-devel libcurl-devel vim-common

cmake编译
cmake -DBUILD_CONFIG=xtrabackup_release -DWITH_MAN_PAGES=OFF && make -j4

安装
make install

安装完成xtrabackup在 /usr/local/xtrabackup 下,查看 xtrabackup 版本
/usr/local/xtrabackup/bin/xtrabackup --version


全量备份

进行全量备份

./xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/vagrant_sync/backup/full --user=root --password='123456'

全量备份还原

1、对备份文件进行恢复前的准备

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处于不一致状态。--prepare 的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

--apply-log 和 --prepare 参数作用一致

./xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/vagrant_sync/backup/full

2、关闭数据库mysql进程,删除mysql数据

/etc/init.d/mysql stop

mv /usr/local/mysql/var /usr/local/mysql/var.bak.full

3、迁移备份数据到mysql数据目录,然后修改目录权限为mysql

./xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/vagrant_sync/backup/full

chown -R mysql:mysql /usr/local/mysql/var

4、启动数据库
/etc/init.d/mysql start


增量备份

进行增量备份

进行增量备份前需要先有一份全量备份,然后第一次增量备份基于全量备份进行增量处理,它的原理主要是依据第一次全量备份 xtrabackup_checkpoints 文件里的 to_lsn 参数进行增量备份,对于非InnoDB数据库来说,每次增量备份也是全量备份

./xtrabackup --backup --target-dir=/vagrant_sync/backup/inc_001 --incremental-basedir=/vagrant_sync/backup/full --user=root --password='123456'

第二次增量备份需要基于第一次增量备份的 to_lsn 参数进行增量备份

./xtrabackup --backup --target-dir=/vagrant_sync/backup/inc_002 --incremental-basedir=/vagrant_sync/backup/inc_001 --user=root --password='123456'

全量+增量还原

1、对备份文件进行恢复前的准备

./xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/vagrant_sync/backup/full

2、接着按顺序对增量备份文件依次进行恢复前准备,执行完准备后数据会整合落地到全备文件中,而且全备的 xtrabackup_checkpoints 里的 lsn 参数可以看到会和增量备份文件一致

./xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/vagrant_sync/backup/full --incremental-dir=/vagrant_sync/backup/inc_001

./xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/vagrant_sync/backup/full --incremental-dir=/vagrant_sync/backup/inc_002

在以上进行恢复前准备时,需要带入参数 --apply-log-only,意思是只进行redo处理,不进行回滚,因为备份时未提交的事务可能正在进行,并且很可能会在下一次增量备份中提交。所以需要通过此 选项来防止回滚阶段。

3、接着跟全备恢复一样即可,关闭mysql,备份mysql数据,迁移全备文件,重启mysql查看结果。由于在执行恢复准备时,增量备份的内容已经整合到全备里面去了,所以在最后恢复时,只需要恢复全备即可。


针对部分库进行备份和还原

针对部分数据库全量备份,多个数据库用空格隔开

./xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/vagrant_sync/backup/full --databases="cabbage_server" --user=root --password='123456'

增量备份

./xtrabackup --backup --target-dir=/vagrant_sync/backup/inc_001 --incremental-basedir=/vagrant_sync/backup/full --databases="cabbage_server" --user=root --password='123456'

还原

./xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/vagrant_sync/backup/full

./xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/vagrant_sync/backup/full --incremental-dir=/vagrant_sync/backup/inc_001

由于是部分数据库恢复,所以不能将整个mysql数据目录删除迁移,关闭mysql进程后,将数据库文件覆盖到mysql数据中,然后重启

/etc/init.d/mysql stop
mv /usr/local/mysql/var/cabbage_server /tmp
cp -fr /vagrant_sync/backup/full/cabbage_server /usr/local/mysql/var/
/etc/init.d/mysql start

官方文档

文档索引:
https://www.percona.com/doc/percona-xtrabackup/2.4/index.html#backup-scenarios

源码安装教程:
https://www.percona.com/doc/percona-xtrabackup/2.4/installation/compiling_xtrabackup.html

xtrabackup参数说明:
https://www.percona.com/doc/percona-xtrabackup/2.4/xtrabackup_bin/xbk_option_reference.html

全量备份:
https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/full_backup.html

增量备份:
https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html