MySQL二进制热备份工具:Percona XtraBackup的使用和备份原理图解

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完整备份过程

    完整备份数据在可用于恢复或可使用之前,经历两个阶段:

    • 备份阶段:备份过程如下图
      innobackupex-stage1
    • 准备阶段:启动XtraBackup内嵌的InnoDB实例,回放xtrabackup日志并将提交的事务变更应用到InnoDB数据/表空间,同时回滚未提交的事务(类似InnoDB Crash Recovory)
      innobackupex-stage2
      innobackupex-stage2-1
    • innobackupex增量备份过程

      innobackupex增量备份过程中的"增量"变更处理其实是对InnoDB而言,对MyISAM和其它存储引擎仍然是全拷贝.
      "增量"处理拷贝InnoDB中有变更的"页"("页"的LSN > 给定的LSN).LSN信息保存在备份的xtrabackup_checkpoints文件中.

      innobackupex-incremental

      "增量"的应用:

      innobackupex-incremental_apply

      InnoDB系统表空间ibdata1的结构:

      ibdata1_structure

      实际恢复过程:

      innobackupex-incremental_apply_real
    • innobackupex流备份过程
      innobackupex-stream

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14431099/viewspace-1316649/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14431099/viewspace-1316649/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值