# wget -c http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.6/binary/Linux/x86_64/percona-xtrabackup-2.0.6-523.tar.gz # tar zxvf percona-xtrabackup-2.0.6-523.tar.gz # mv percona-xtrabackup-2.0.6 /usr/local/xtrabackup
# mysql -uroot -p123456 -e "CREATE USER 'backup'@'%' IDENTIFIED BY '123456'" # mysql -uroot -p123456 -e "GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, SUPER ON *.* TO 'backup'@'%'"
完整备份:
# innobackupex --user=backup --password=123456 /data/vbackup/hotbackup/full --no-timestamp --parallel=2
备份恢复准备:
# innobackupex --apply-log --use-memory=10G /data/vbackup/hotbackup/full
恢复备份:
##停止mysql,清空MySQL的datadir # service mysql stop # mv /usr/local/mysql/data /usr/local/mysql/data.old # mkdir -p /usr/local/mysql/data ##恢复备份数据,并修改datadir的权限 # innobackupex --copy-back --rsync /data/vbackup/hotbackup/full # chown -R mysql:mysql /usr/local/mysql/data
启动MySQL:
# service mysql start
创建基础备份(全备份):
# innobackupex --user=backup --password=123456 /data/vbackup/hotbackup/base --no-timestamp --parallel=2
基于基础备份,创建增量备份inc_one:
# innobackupex --user=backup --password=123456 --incremental /data/vbackup/hotbackup/inc_one --incremental-basedir=/data/vbackup/hotbackup/base --no-timestamp --parallel=2
基于增量备份inc_one,创建增量备份inc_two:
# innobackupex --user=backup --password=123456 --incremental /data/vbackup/hotbackup/inc_two --incremental-basedir=/data/vbackup/hotbackup/inc_one --no-timestamp --parallel=2
准备基础备份(应用基础备份xtrabackup日志中的提交的事务,但不回滚未提交的事务):
# innobackupex --apply-log --redo-only --use-memory=10G /data/vbackup/hotbackup/base
将增量备份inc_one应用到基础备份:
# innobackupex --apply-log --redo-only --use-memory=10G /data/vbackup/hotbackup/base/ --incremental-dir=/data/vbackup/hotbackup/inc_one/
将增量备份inc_two应用到基础备份:
# innobackupex --apply-log --use-memory=10G /data/vbackup/hotbackup/base/ --incremental-dir=/data/vbackup/hotbackup/inc_two
注:当准备基础备份和合并增量备份(最后一个增量备份除外)的时候,需要使用--redo-only参数.
当所有的增量备份合并完成之后,再一次准备全备份,回滚未提交的事务.
# innobackupex --apply-log --use-memory=10G /data/vbackup/hotbackup/base/
恢复全备份并启动MySQL:
# service mysql stop # rm -rf /usr/local/mysql/data.old && mv /usr/local/mysql/data /usr/local/mysql/data.old # mkdir -p /usr/local/mysql/data # innobackupex --copy-back --rsync /data/vbackup/hotbackup/base/ # chown -R mysql:mysql /usr/local/mysql/data # service mysql start
innobackupex部分备份,有以下三个参数可选择:
1. --databases="database1[.table1] ..." 比如: --databases="employees sales.orders" 2. --tables-file=tables.txt, tables.txt文件每一行有一个database.table 3. --include=regexp, 比如: --include='^database(1|2)\.reports'
在准备”部分备份”和拷贝恢复”部分备份”到一个空的datadir之后,请确保datadir中有”mysql”数据库,否则MySQL无法启动.
如果没有,则需要先创建系统的数据库再启动:
# mysql_install_db --user=mysql
在主从复制环境中的”从库”做热备份的时候,可以使用--slave-info和--safe-slave-backup参数.
在备份的时候使用--slave-info会将Master的binary log的文件名和偏移位置记录打印出来,同时也保存到xtrabackup_slave_info文件中.
--safe-slave-backup则会暂停Slave的SQL线程,等待到没有打开的临时表的时候开始备份.备份结束后SQL线程会自动启动,这样就可以确保一致性的复制状态.
将完全备份直接存储到tar压缩包,并将它进行gzip压缩:
# innobackupex --user=backup --password=123456 --stream=tar ./ | gzip - > backup.tar.gz
完全备份并gzip压缩发送到远程机器:
# innobackupex --user=backup --password=123456 --stream=tar ./ | gzip | ssh root@192.168.1.192 "cat - > /data/www/mysql/tarbackup/backup.tar.gz"
解压缩(必须使用-i参数):
# tar -izxvf backup.tar.gz -C ./data/
注:解压之后的数据仍然需要进行apply-log之后才可以用于恢复.
将备份压缩到名为”backup.xbstream”的压缩包:
# innobackupex --user=backup --password=123456 --stream=xbstream ./ > backup.xbstream
解压backup.xbstream到./backup/:
# xbstream -x < backup.xbstream -C ./backup/
多线程并行文件拷贝和qpress并行快速压缩备份,然后直接发送到远程机器并进行xbstream解压保存:
# innobackupex --user=backup --password=123456 --compress --compress-threads=8 --parallel=4 --stream=xbstream ./ | ssh root@192.168.1.192 "xbstream -x -C /data/www/mysql/backup"
远程机器上对xbstream解压后的备份文件中的qpress压缩文件进行解压:
# cd /data/www/mysql/backup # for f in `find ./ -iname "*\.qp"`; do qpress -dT2 $f $(dirname $f) && rm -f $f; done
注:解压之后的数据仍然需要进行apply-log之后才可以用于恢复.
当前XtraBackup的稳定版本(2.06)的流增量备份仅支持xbstream格式.
创建基础全备份,发送到远程机器并解压:
# innobackupex --user=backup --password=123456 --parallel=4 --stream=xbstream ./ | ssh root@192.168.1.192 "xbstream -x -C /data/www/mysql/incremental/base"
查看基础备份的checkpoint信息:
# ssh root@192.168.1.192 -C "cat /data/www/mysql/incremental/base/xtrabackup_checkpoints" backup_type = full-backuped from_lsn = 0 to_lsn = 1807243286 last_lsn = 1807243286
基于基础备份,创建增量备份one:
# innobackupex --user=backup --password=123456 --parallel=4 --incremental --incremental-lsn=1807243286 --stream=xbstream ./ | ssh root@192.168.1.192 "xbstream -x -C /data/www/mysql/incremental/one"
注:关于增量备份的日志应用和备份恢复,请参考上文的"MySQL增量热备份恢复"部分.
XtraBackup备份原理图解
完整备份过程如图:

准备和恢复数据阶段过程如图:
首先应用xtrabackup日志提交事务应用到InnoDB,然后回滚未提交事务


增量备份过程如图:
对于增量备份只对InnoDB,MyISAM和其它引擎仍然是完整备份的方式,增量备份主要是处理InnoDB中有变更的页(页的LSN).LSN信息在xtrabackup_checkpoints中.

增量应用:

InnoDB表空间的结构:

恢复过程如图:

流备份过程图:

注释:此篇博文图片来自谷歌搜索,文字描述借鉴官方文档同时加上自己总结而成.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30150152/viewspace-1809259/ ,如需转载,请注明出处,否则将追究法律责任。