Zn昕 2018-12-14
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。几年前使用过,但现在忘记的差不多了,所以就重新拾起看看。
xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1).xtrabackup只能备份InnoDB和XtraDB 两种数据表 (2).innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表
Innobackupex完整备份后生成了几个重要的文件:
xtrabackup_binlog_info:记录当前最新的LOG Position xtrabackup_binlog_pos_innodb:innodb log postion xtrabackup_checkpoints: 存放备份的起始位置beginlsn和结束位置endlsn,增量备份需要这个lsn[增量备份可以在这里面看from和to两个值的变化]
Xtrabackup特点:
(1)备份过程快速、可靠 (2)备份过程不会打断正在执行的事务 (3)能够基于压缩等功能节约磁盘空间和流量 (4)自动实现备份检验 (5)还原速度快
1、查看libgcrypt版本
# rpm -qa |grep libgcrypt
根据libgcrypt版本号1.4.5对应选择xtrabackup
2、直接下载二进制包,不编译,编译需要和MySQL源码包配合。
https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/tarball/percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz
3、解压并创建软连接:
# tar -xvf percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz # mv percona-xtrabackup-2.4.12-Linux-x86_64 /usr/local/xtrabackup # ln -s /usr/local/xtrabackup/bin/* /usr/bin/
4、查看版本:
# xtrabackup --version
5、根据操作系统的版本安装合适的perl-DBD-MySQL后问题解决
# rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
安装完之后会生成几个工具:
innobackupex:这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。但在处理Myisam时需要加一个读锁。 xtrabackup:一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。 xbcrypt:用来加密或解密备份的数据。 xbstream:用来解压或压缩xbstream格式的压缩文件。
innobackupex :
xtrabackup命令只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候必须有对应表结构文件(.frm)。
用innobackupex命令,此命令相当于冷备份,复制数据目录的索引,数据,结构文件,但会有短暂的锁表(时间依赖于MyISAM大小)。
参数:
--defaults-file:指定my.cnf参数文件的位置[此配置文件里必须指定datadir] --apply-log:同xtrabackup的--prepare参数,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。 --copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir --remote-host=HOSTNAME: 通过ssh将备份数据存储到进程服务器上 --stream=[tar]:备份文件输出格式, 该文件可在XtarBackup binary文件中获得. 在使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话,xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题. --tmpdir=DIRECTORY:当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir --redo-only --apply-log:强制备份日志时只redo,跳过rollback,这在做增量备份时非常必要 --use-memory=*:该参数在prepare的时候使用,控制prepare时innodb实例使用的内存 --databases=LIST:列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份 --slave-info:备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0 --socket=SOCKET:指定mysql.sock所在位置,以便备份进程登录mysql.
篇幅有限,这里简单介绍下xtrabackup和怎么去安装部署,关于xtrabackup备份恢复的过程只能留着下次分享了,感兴趣的朋友可以关注下~