使用xtrabackup对MySQL innodb表热备份,增量备份

2

1、MySQL备份方式

对于数据库的备份重要性不必多言,为了防止数据以各种方式丢失,损坏,必须对数据库进行定期备份。

  • 首先考虑备份的时候对数据库业务的影响

    • 热备:读写操作均可进行的状态下进行备份

    • 温备:可读但不可写状态下进行的备份

    • 冷备:读写操作均不可进行的状态下所做的备份

  • 再者如果定期进行备份,如果每次都进行全量备份,显然一部分数据是重复,浪费大量磁盘空间

    • 完全备份

    • 差异备份:仅备份自上一次完全备份以来变化的那部数据

    • 增量备份:仅备份自上一次完全备份或 增量备份以来变化的那部分数据

差异备份是按完全备份那一刻的备份数据为起点,进行备份
增量备份是按上一次备份那一刻的备份数据为起点,进行备份
差异备份比增量备份消耗更大的空间,但是增量备份恢复步骤比较多,需要按顺序依次恢复

  • 备份数据两种方法

    • 物理备份:复制数据文件进行备份

    • 逻辑备份:从数据库中导出数据到文件中

这两种方式比较,物理备份更加效率,对数据库运行影响低一些;逻辑备份方式可选择的备份数据粒度更精细。

2、备份利器-xtrabackup

逻辑备份使用mysqldump,用法简单,这里不再详述;
物理备份方法首选xtrabackup开源工具。此款工具由percona开发,对使用Innodb引擎的表可进行热备,增量备份。对MyISAM引擎就不支持这些特性了。

2.1 安装

本文环境:CentOS7.2 ,percona-xtrabackup-2.3.2-1
官方下载传送
安装完成,rpm -ql percona-xtrabackup
查看安装文件,主程序为xtrabackup,另外有已脚本封装工具innobackupex,主要使用它。

2.2 备份

Usage:

innobackupex [--defaults-file=] --user=  --password=  --host=  /PATH/TO/BACKUP_DIR

示例:
数据库正常运行的情况下,我们即可备份,允许远程备份
授权最小权限备份
mysql >grant reload,lock tables,replication client on . to 'user'@'host';

#进行全库备份,工具根据mysql配置,自动寻找数据路径
innobackupex --user=root --password=cutemysql /tmp/backup

clipboard.png

看到OK! 标识即成功完成备份,数据存放路径也可看到
打包压缩,把数据copy到安全的地方去吧!

2.3 恢复

如果某一天数据库数据丢失了,还好我们有备份,冷静地恢复数据
Usage:

innobackupex --apply-log  /PATH/TO/BACKUP_DIR #准备恢复数据
innobackupex --copy-back  /PATH/TO/BACKUP_DIR #正式恢复数据

示例:
恢复的时候,要求数据库服务关闭,并且在本地执行操作,数据库数据路径为空
并且在/etc/my.cnf 中明确指定当前数据库事务日志的大小

  • innodb_log_file_size=5242880

首先进行备份数据准备处理
$ innobackupex --apply-log /tmp/backup/2016-11-22-11-22-20
看到OK ! 标识即为成功

恢复数据准备完成后,即可正式恢复数据
$ innobackupex --copy-back /tmp/backup/2016-11-22_11-22-20

数据库数据路径下已恢复数据,再更改文件属主之后,数据库即可正常启动!
$ chown -R mysql.mysql /var/lib/mysql

热备方式中,备份过程中数据库中产生的事务都会被xtrabackup记录,是为log sequence number(LSN)。在上面执行准备恢复数据语句后,innodb表的数据已经前滚至备份结束那一刻状态。如果要恢复启动备份结束后发生变化的数据,需要结合二进制日志进一步恢复
那么从哪一位置开始恢复二进制日志呢?在备份数据目录中,xtrabackup_binlog_info文件有记录

2.4 增量备份与恢复

2.4.1 增量备份

增量备份之前需要一个全量备份,全量备份目录为2016-11-22_15-59-24

#第一次增量备份
innobackupex --user=root --password=cutemysql  --incremental ./ --incremental-basedir=./2016-11-22_15-59-24
#第二次增量备份,为了看出差异,自行提交一个事务
innobackupex --user=root --password=cutemysql  --incremental ./ --incremental-basedir=./2016-11-22_17-08-42

查看两个目录中记录的lsn,可见增量是在按lsn来记录的

clipboard.png

2.4.2 增量恢复

增量恢复的准备阶段需要注意

  • 按时间顺序进行备份合成

  • 除最后一次追加增量数据时,必须带上--redo-only 选项

  • incremental-dir 使用绝对路径

#对全量数据准备
innobackupex --apply-log --redo-only ./2016-11-22_15-59-24
#追加第一次增量数据
innobackupex --apply-log --redo-only ./2016-11-22_15-59-24 --incremental-dir=/tmp/backup/2016-11-22_17-08-42
#追加第二次增量数据,也是最后一次,不带--redo-only
innobackupex --apply-log  ./2016-11-22_15-59-24 --incremental-dir=/tmp/backup/2016-11-22_17-20-25
#恢复数据
innobackupex --copy-back fullbak
chown -R mysql.mysql /var/lib/mysql

至此完成!

2.5 备份压缩

xtrabackup 支持stream流压缩

#备份时开启stream选项压缩
innobackupex --stream=tar ./ | gzip - > backup.tar.gz
innobackupex --stream=tar ./ | bzip2 - > backup.tar.bz2
#解压时注意带上-i 选项
tar -xizf backup.tar.gz -C backup

--- EOF ---

你可能感兴趣的

载入中...