在实际的生产环境中要保证线上的服务正常是非常重要的,所以在平时备份数据库一般都是在使用比较少的时候进行的,而在 mysql 中有默认的备份工具 mysqldump,在一般的场景中备份都没有太大的问题,mysqldump 这种古老的工具在备份时是把数据转化成 sql 的脚本,是一种逻辑备份方式,但是比较大的数据备份时或者需要做主从同步的时的备份时 mysqldump 的效率就变的十分低下了(长时间的锁表、占用大量的系统资源、备份大量数据时间长等等),所以在这些特殊的场景下 mysqldump 并时不是很好的选择,因此有人用 perl 写了一个专门用来备份 innodb 和 myisam 引擎的开源工具——xtrabackup,当然在在 1.51 版本后为了也能备份 myisam 引擎就进行再次的封装 xtrabackup 即 innobackupex,当然 innobackupex 在备份 myisam 引擎时会添加只读锁的。
xtrabackup 开源工具官网下载地址:找到你适合的版本,尽量用最新的,当然官网也有提供 rpm 包,但是为了方便就下载了二进制包进行快速的部署安装:
- [ 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
- [ src]# tar -zxvf percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz -C /usr/local/
- #配置说明手册及环境变量
- [ src]# vim /etc/man.conf
- …略…
- MANPATH /usr/local/percona-xtrabackup-2.4.5-Linux-x86_64/man
- [ 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:用于云上上传和下载的工具
来源: