物理备份工具Percona XtraBackup

Percona XtraBackup

简介

Percona XtraBackup是世界上唯一的开源免费MySQL热备份软件,可为InnoDB和XtraDB 数据库执行无阻塞备份。使用Percona XtraBackup,有以下优点

  • 备份快速可靠地完成
  • 备份期间不间断的事务处理
  • 节省磁盘空间和网络带宽
  • 自动备份验证
  • 由于更快的恢复时间,正常运行时间更长

Percona XtraBackup可与MySQL,MariaDB和Percona Server配合使用。它支持InnoDB,XtraDB和HailDB 存储引擎的完全非阻塞备份。此外,它还可以通过在备份结束时暂时暂停写入来备份以下存储引擎:MyISAM, Merge和Archive,包括分区表,触发器和数据库选项。

这里有一点需要注意,在MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。原因可能是MariaDB10.3以上版本的redo日志格式和之前不同了。

Percona的官方文档:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
Mariabackup的官方文档:https://mariadb.com/kb/en/library/mariabackup-overview/

这个物理备份工具的原理可以参考这篇文章: http://mysql.taobao.org/monthly/2016/03/07/

功能

  • 创建热InnoDB备份而不暂停数据库
  • 进行MySQL的增量备份
  • 将压缩的MySQL备份流式传输到另一台服务器
  • 在线MySQL服务器之间移动表
  • 轻松创建新的MySQL从库
  • 备份MySQL而不增加服务器负载

安装

官网下载页面: https://www.percona.com/downloads/XtraBackup/LATEST/

1.安装yum仓库

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm

2.安装Percona XtraBackup

yum install percona-xtrabackup-24

常用选项

  • - -apply-log-only
    此选项仅在准备备份时,执行重做阶段。在恢复之前,需要将事务日志里的变化合并到物理数据中,这个过程叫做apply-log
  • - -backup
    进行备份
  • - -compress
    此选项告诉xtrabackup使用指定的压缩算法压缩所有输出数据,包括事务日志文件和元数据文件。目前唯一支持的算法是quicklz。生成的文件具有qpress存档格式,即*.qpxtrabackup生成的每个文件本质上都是一个文件的qpress存档,可以通过qpress 文件存档提取和解压缩。
  • - -copy-back
    将先前制作的备份中的所有文件从备份目录复制到data目录位置。
  • - -defaults-file=[MY.CNF]
    仅读取给定文件中的默认选项。必须作为命令行中的第一个选项。必须是真实的文件; 它不能成为一种象征性的联系。
  • - -incremental-basedir=DIRECTORY
    创建增量备份时,这是包含完整备份的目录,该备份是增量备份的基础数据集。
  • - -incremental-dir=DIRECTORY
    准备增量备份时,这是增量备份与完整备份组合的目录,以进行新的完整备份。
  • - -move-back
    将先前制作的备份中的所有文件从备份目录移动到其原始位置。由于此选项会删除备份文件,因此必须谨慎使用。
  • - -target-dir=DIRECTORY
    此选项指定备份的目标目录。如果该目录不存在,则xtrabackup会创建它。如果目录确实存在且为空,则xtrabackup将成功。 但是,xtrabackup不会覆盖现有文件;
  • - -user=USERNAME
    此选项指定连接到服务器时使用的MySQL用户名
  • - -password=PASSWORD
    此选项指定连接到数据库时要使用的密码
  • - -prepare
    使xtrabackup在使用创建的备份上执行恢复
  • - -parallel=#
    设置并发数量,一般可以4个,但是具体根据cpu调整

完全备份

  • 完全备份
    备份的时候,会立即将内存中已提交的数据页落盘,然后开始备份数据,记录此时的LSN号,数据库可能还会继续跑,然后不断地监控redo和undo日志,如果有变化,也会把事务日志也一起备走并记录最后一个LSN号。
xtrabackup  --user=root --password=centos --backup \
     -S /tmp/mysql.sock \
     --target-dir=/backup/fullback

完全备份的恢复

  • 准备备份
    使用该选项进行备份后,您首先需要准备它以便恢复它。数据文件在准备之前不是时间点一致的,因为它们在程序运行时的不同时间被复制,在数据文件中的LSN号和事务日志中的LSN号不一致,备份的数据结合事务日志,该回滚回滚,该提交提交,相当于模拟了CSR的过程,这时候就能保证数据的一致性,数据库才能启动,否则检测到数据不一致是无法启动的。
xtrabackup --prepare --target-dir=/backup/fullback
  • 恢复全备
xtrabackup --copy-back --target-dir=/backup/fullback
  • 修改权限
chown -R mysql:mysql /usr/local/mysql/data/

至此一次完全备份与恢复完成

增量备份

无论xtrabackup和innobackupex工具支持增量备份,这意味着它们可以只复制自上次备份以来发生变化的数据。
增量备份有效,因为每个InnoDB页面都包含一个日志序列号或LSN。该LSN是整个数据库系统的版本号。每个页面的LSN显示它最近的更改。
增量备份的方式是基于上一次备份进行的,增量备份无法单独恢复,必须基于全备进行恢复,所有的增量必须要按照顺序合并到全备中

  • 创建一个全备
xtrabackup  -uroot -p123456 --backup  --target=dir=/backup/fullback/
  • 基于全备做第一次增量备份
xtrabackup -uroot -p123456 --backup  --target-dir=/backup/inc1  --incremental-basedir=/backup/xtrabackup_backupfiles/
  • 基于全备做第二次增量备份
xtrabackup -uroot -p123456 --backup  --target-dir=/backup/inc2  --incremental-basedir=/backup/inc1/

查看三个备份的xtrabackup_checkpoints,可以看到里面的LSN是连续的

[root@localhost backup]# cat /backup/xtrabackup_backupfiles/xtrabackup_checkpoints  /backup/inc1/xtrabackup_checkpoints  /backup/inc2/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 63271483
last_lsn = 63271492
compact = 0
recover_binlog_info = 0

backup_type = incremental
from_lsn = 63271483
to_lsn = 63271483
last_lsn = 63271492
compact = 0
recover_binlog_info = 0

backup_type = incremental
from_lsn = 63271483
to_lsn = 63271483
last_lsn = 63271492
compact = 0
recover_binlog_info = 0

增量备份的恢复

  • 准备基础备份(全备)
xtrabackup -uroot -p123456  --prepare --apply-log-only --target-dir=/backup/xtrabackup_backupfiles/
  • 准备第一次增量备份
xtrabackup --prepare --apply-log-only  --target-dir=/backup/xtrabackup_backupfiles/  --incremental-dir=/backup/inc1
  • 准备第二次增量备份
xtrabackup --prepare   --target-dir=/backup/xtrabackup_backupfiles/  --incremental-dir=/backup/inc2

查看一下check_point文件

[root@localhost backup]# cat /backup/xtrabackup_backupfiles/xtrabackup_checkpoints 
backup_type = full-prepared
from_lsn = 0
to_lsn = 63271099
last_lsn = 63271108
compact = 0
recover_binlog_info = 0
  • 恢复
xtrabackup -uroot -p123456  --copy-back --target-dir=/backup/xtrabackup_backupfiles/
  • 修改权限
chown -R mysql:mysql /data/

至此一次完全备份与恢复完成

备份多出来的文件

  • xtrabackup_info
    记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。

  • xtrabackup_checkpoints
    记录备份类型(如完全或增量)和LSN(日志序列号)范围信息,xtrabackup备份的时候会先将内存里的数据页刷新到磁盘,然后记录当时的LSN号也就是to_lsn,这时候数据库可能还会继续跑,last_lsn就是备份结束的最后一个LSN号码。而from_lsn增量备份的时候会用到

[root@localhost backup]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 63242125
last_lsn = 63242134
compact = 0
recover_binlog_info = 0
  • xtrabackup_logfile
    备份过程中的redo日志
  • xtrabackup_binlog_info
    记录备份时刻,binlog的文件名和结束的position位置

没有更多推荐了,返回首页