XtraBackup介绍
Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。
XtraBackup优势:
- 无需停止数据库进行InnoDB热备
- 增量备份MySQL
- 流压缩传输到其它服务器
- 能比较容易地创建主从同步
- 备份MySQL时不会增大服务器负载
创建mysql备份用户
1 | mysql -uroot -p123456 -e "CREATE USER 'backup'@'%' IDENTIFIED BY '123456'" |
mysql完整热备份与恢复
完整备份
1 | innobackupex --user=backup --password=123456 /data/vbackup/hotbackup/full --no-timestamp --parallel=2 |
备份恢复准备
1 | innobackupex --apply-log --use-memory=10G /data/vbackup/hotbackup/full |
恢复备份
1 | service mysql stop # 停止mysql,清空MySQL的datadir |
mysql增量热备份
创建基础备份(全备份)
1 | innobackupex --user=backup --password=123456 /data/vbackup/hotbackup/base --no-timestamp --parallel=2 |
基于基础备份,创建增量备份inc_one
1 | 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
1 | innobackupex --user=backup --password=123456 --incremental /data/vbackup/hotbackup/inc_two --incremental-basedir=/data/vbackup/hotbackup/inc_one --no-timestamp --parallel=2 |
mysql增量热备份恢复
准备基础备份(应用基础备份xtrabackup日志中的提交的事务,但不回滚未提交的事务)
1 | innobackupex --apply-log --redo-only --use-memory=10G /data/vbackup/hotbackup/base |
将增量备份inc_one应用到基础备份
1 | innobackupex --apply-log --redo-only --use-memory=10G /data/vbackup/hotbackup/base/ --incremental-dir=/data/vbackup/hotbackup/inc_one/ |
将增量备份inc_two应用到基础备份
1 | innobackupex --apply-log --use-memory=10G /data/vbackup/hotbackup/base/ --incremental-dir=/data/vbackup/hotbackup/inc_two |
- 注:当准备基础备份和合并增量备份(最后一个增量备份除外)的时候,需要使用
--redo-only
参数。
当所有的增量备份合并完成之后,再一次准备全备份,回滚未提交的事务
1 | innobackupex --apply-log --use-memory=10G /data/vbackup/hotbackup/base/ |
恢复全备份并启动mysql
1 | service mysql stop |
innobackupex部分备份
innobackupex部分备份,有以下三个参数可选择
--databases="database1[.table1] ..."
- 比如:
--databases="employees sales.orders"
- 比如:
--tables-file=tables.txt
- tables.txt文件每一行有一个database.table
--include=regexp,
- 比如:
--include='^database(1|2)\.reports'
- 比如:
在准备“部分备份”和拷贝恢复“部分备份”到一个空的datadir之后,请确保datadir中有”mysql”数据库,否则mysql无法启动。
如果没有,则需要先创建系统的数据库再启动:
1 | 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压缩
1 | innobackupex --user=backup --password=123456 --stream=tar ./ | gzip - > backup.tar.gz |
完全备份并gzip压缩发送到远程机器
1 | innobackupex --user=backup --password=123456 --stream=tar ./ | gzip | ssh root@192.168.1.192 "cat - > /data/tarbackup/backup.tar.gz" |
解压缩(必须使用 -i 参数)
1 | tar -izxvf backup.tar.gz -C ./data/ |
注:解压之后的数据仍然需要进行 apply-log 之后才可以用于恢复
xbstream流备份及压缩
将备份压缩到名为”backup.xbstream”的压缩包
1 | innobackupex --user=backup --password=123456 --stream=xbstream ./ > backup.xbstream |
解压backup.xbstream到./backup/
1 | xbstream -x < backup.xbstream -C ./backup/ |
多线程并行文件拷贝和qpress并行快速压缩备份,然后直接发送到远程机器并进行xbstream解压保存
1 | innobackupex --user=backup --password=123456 --compress --compress-threads=8 --parallel=4 --stream=xbstream ./ | ssh root@192.168.1.192 "xbstream -x -C /data/mysql/backup" |
远程机器上对xbstream解压后的备份文件中的qpress压缩文件进行解压
1 | cd /data/mysql/backup |
注:解压之后的数据仍然需要进行 apply-log 之后才可以用于恢复。
xbstream流增量备份
创建基础全备份,发送到远程机器并解压
1 | innobackupex --user=backup --password=123456 --parallel=4 --stream=xbstream ./ | ssh root@192.168.1.192 "xbstream -x -C /data/www/mysql/incremental/base" |
查看基础备份的checkpoint信息
1 | ssh root@192.168.1.192 -C "cat /data/www/mysql/incremental/base/xtrabackup_checkpoints" |
基于基础备份,创建增量备份one
1 | 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增量热备份恢复”部分
xtrabackup选项注释
1 | --print-defaults显示默认选项。Xtrabackup默认情况会去读my.cnf文件,读取顺序是/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf |
innobackupex选项注释
1 | --defaults-file=[MY.CNF]该选项传递给xtrabackup子进程,从指定文件读取缺省选项 |