Percona XtraBackup
- Percona XtraBackup二进制版本安装
# 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二进制热备份与恢复
- 创建MySQL备份用户
# 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'@'%'"
- MySQL完整热备份与恢复
完整备份:
# 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
- MySQL增量热备份
创建基础备份(全备份):
# 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
- MySQL增量热备份恢复
准备基础备份(应用基础备份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部分备份
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
- innobackupex从库热备份
在主从复制环境中的”从库”做热备份的时候,可以使用--slave-info和--safe-slave-backup参数.
在备份的时候使用--slave-info会将Master的binary log的文件名和偏移位置记录打印出来,同时也保存到xtrabackup_slave_info文件中.
--safe-slave-backup则会暂停Slave的SQL线程,等待到没有打开的临时表的时候开始备份.备份结束后SQL线程会自动启动,这样就可以确保一致性的复制状态.
XtraBackup流备份与压缩备份
- tar流备份及压缩
将完全备份直接存储到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之后才可以用于恢复.
- xbstream流备份及压缩
将备份压缩到名为”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之后才可以用于恢复.
- xbstream流增量备份
当前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增量热备份恢复"部分.
innobackupex备份原理图解
- innobackupex完整备份过程
完整备份数据在可用于恢复或可使用之前,经历两个阶段:
- 备份阶段:备份过程如下图
- 准备阶段:启动XtraBackup内嵌的InnoDB实例,回放xtrabackup日志并将提交的事务变更应用到InnoDB数据/表空间,同时回滚未提交的事务(类似InnoDB Crash Recovory)
- innobackupex增量备份过程
innobackupex增量备份过程中的"增量"变更处理其实是对InnoDB而言,对MyISAM和其它存储引擎仍然是全拷贝.
"增量"处理拷贝InnoDB中有变更的"页"("页"的LSN > 给定的LSN).LSN信息保存在备份的xtrabackup_checkpoints文件中."增量"的应用:
InnoDB系统表空间ibdata1的结构:
实际恢复过程:
- innobackupex流备份过程
- 备份阶段:备份过程如下图
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14431099/viewspace-1316649/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14431099/viewspace-1316649/