在实际的生产环境中要保证线上的服务正常是非常重要的,所以在平时备份数据库一般都是在使用比较少的时候进行的,而在mysql中有默认的备份工具mysqldump,在一般的场景中备份都没有太大的问题,mysqldump这种古老的工具在备份时是把数据转化成sql的脚本,是一种逻辑备份方式,但是比较大的数据备份时或者需要做主从同步的时的备份时mysqldump的效率就变的十分低下了(长时间的锁表、占用大量的系统资源、备份大量数据时间长等等),所以在这些特殊的场景下mysqldump并时不是很好的选择,因此有人用perl写了一个专门用来备份innodb和myisam引擎的开源工具——xtrabackup,当然在在1.51版本后为了也能备份myisam引擎就进行再次的封装xtrabackup即innobackupex,当然innobackupex在备份myisam引擎时会添加只读锁的。
xtrabackup开源工具官网下载地址:https://www.percona.com/downloads/XtraBackup找到你适合的版本,尽量用最新的,当然官网也有提供rpm包,但是为了方便就下载了二进制包进行快速的部署安装:
[root@localhost src]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.5/\
> binary/tarball/percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz
[root@localhost src]# tar -zxvf percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz -C /usr/local/
#配置说明手册及环境变量
[root@localhost src]# vim /etc/man.conf
…略…
MANPATH /usr/local/percona-xtrabackup-2.4.5-Linux-x86_64/man
[root@localhost src]# vim /etc/profile.d/percona-xtrabackup.sh
export PATH=$PATH:/usr/local/percona-xtrabackup-2.4.5-Linux-x86_64/bin
innobackupex中常用的选项参数有:
--host=name:mysql的主机ip地址
--port=#:mysql的端口号
--user=name:mysql的用户名
--socket=name:mysql socket文件路径
--databases=name:指定mysql库
--defaults-file:指定读取默认的my.cnf的文件路径,默认是读取/etc/my.cnf
--incremental-basedir=name:指定完全备份的目录名
--apply-log:回滚innodb的事务,个用于备份数据后直接恢复数据用的
--redo-only:强制备份日志时只redo ,跳过rollback,做增量备份的时候必须要用
--copy-back:还原备份的操作
--include=name:备份包含的库表,例如:--include="mysql.*"备份mysql库的所有表
--slave-info:备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移,
文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0,用于制作从库时候用的
--safe-slave-backup:和slave-info 结合使用,发起备份的时候,会把SLAVE暂停,确保备份时没有临时表打开,保证一致性
--no-lock:备份时不锁表,如果mysql的session中有“FLUSH TABLES WITH READ LOCK;”也不锁定
基本上一般常见的场景中这些参数都够用了,当然如果有其他特殊的场景所用的参数选项可以在查看innobackupex --help或者是man innobackupex查看更多当然在percona-xtrabackup中还有提供其他的工具:
xbcrypt:用于加密或者解密数据库
xbstream:流式备份的支持
xbcloud、xbcloud_osenv:用于云上上传和下载的工具
更多XtraBackup相关教程见以下内容:
CentOS 7 安装Percona 与 Xtrabackup