MySQL · 2016-12-31 0

MySQL innobackupex 备份工具使用总结

前言


在MySQL备份以及搭建从库的过程中,我们针对比较小的库大多采用的是mysqldump,简单,方便。但是在大库进行搭建从库的时候,且数据库主机没有一个很好的存储来满足备份,这个时候就需要使用innobackupex来协助你来做一个备份,甚至可以用他来搭建MySQL的从库,非常简单哦。

一、MySQL innobackupex 备份恢复


1.1 压缩xbsteam方式打包压缩进行备份恢复

  • 备份
    innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --stream=xbstream --compress /data/backup/ > /data/backup/full.xbstream
    
  • 解压缩xbstream
    xbstream -x < /data/backup/full.xbstream -C /data/backup_qp/
    
  • 解压qp
    innobackupex --decompress /data/backup_qp
    
  • 删除qp文件
    find /data/backup -name "*.qp" | xargs rm
    

注:如果报无法找到qpress,需要先安装qpress

1.2 采用tar gzip 方式进行备份恢复

  • 备份
    innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --stream=tar /data/backup/ |gzip > /data/backup/full.tar.gz
    
  • 解压缩
    tar -zxvf /data/backup/full.tar.gz -C /data/backup_targz
    

1.3 采用tar bzip方式进行备份恢复

  • 备份
    innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --stream=tar /data/backup/ |bzip2 > /data/backup/full.tar.bz2
    
  • 解压缩
    tar -jxvf /data/backup/full.tar.gz -C /data/backup_tarbz
    

各种备份文件大小如下,发现bz2的压缩方式最小,没压缩和压缩占用空间差别还是很大的,推荐使用压缩方式。

innobackup_result

二、MySQL从库搭建


2.1、 xbsteam方式备份,然后手动拷贝到远程主机

ref:利用innobackupex 进行MySQL从库搭建

2.2、 xbsteam方式打包通过ssh备份到远程主机并解压

  • 执行备份
    innobackupex --defaults-file=/etc/my.cnf --user=root --password='root' --stream=xbstream /tmp | ssh root@10.0.0.6 "/app/percona/percona-xtrabackup-2.4.3-Linux-x86_64/bin/xbstream -x -C /data/mysql/data"
    
  • 如果发现innobackupex一直在等待FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS,可以将其他连接杀一把
    mysql -e "show processlist" | grep -v -i -e root -e id | awk '{printf "kill "$1";"}' | mysql
    
  • 日志如下:
    161219 20:11:21 [00] Streaming xtrabackup_binlog_info
    161219 20:11:21 [00] ...done
    161219 20:11:21 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
    xtrabackup: The latest check point (for incremental): '6499141903477'
    xtrabackup: Stopping log copying thread.
    .161219 20:11:21 >> log scanned up to (6499141993412)
    
    161219 20:11:23 Executing UNLOCK TABLES
    161219 20:11:23 All tables unlocked
    161219 20:11:23 [00] Streaming ib_buffer_pool to
    161219 20:11:23 [00] ...done
    161219 20:11:23 Backup created in directory '/tmp'
    MySQL binlog position: filename 'mysql-bin.001249', position '151576713', GTID of the last change '4d814c80-9dae-11e6-9711-005056bd55e1:1-113121904,
    5f7b59b2-3e74-11e6-aa1d-005056bd55e1:27485200-29545503,
    db6a8610-9b3e-11e6-8730-005056bd2c74:1-221265164'
    161219 20:11:23 [00] Streaming backup-my.cnf
    161219 20:11:23 [00] ...done
    161219 20:11:23 [00] Streaming xtrabackup_info
    161219 20:11:23 [00] ...done
    xtrabackup: Transaction log of lsn (6498376046758) to (6499141993412) was copied.
    161219 20:11:24 completed OK!
    
  • 到备库进行redo应用
    innobackupex --apply-log .
  • 注:如果无法找到xbsream,需要指定绝对路径,或者配置ssh的环境变量http://blog.chinaunix.net/uid-20738531-id-1881133.html

    2.3 xbsteam方式打包压缩(qpress)通过ssh备份到远程主机并解压

  • 执行备份
    innobackupex --defaults-file=/etc/my.cnf --user=root --password='root' --stream=xbstream --compress /tmp | ssh root@10.0.0.0.6 "/app/percona/percona-xtrabackup-2.4.3-Linux-x86_64/bin/xbstream -x -C /data/mysql/data"
    
  • 解压
    如果xtrabackup版本大于2.1.4,可以直接通过该方式解压

    innobackupex --decompress /backup/bk_compress
    
  • 到备库进行redo应用

    innobackupex --apply-log .