Xtrabackup数据库备份与恢复

​ Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。

安装

测试环境:CentOS 7 ,MySQL 5.7

有多种安装方式,以下使用rmp包安装方式进行演示安装

#下载rpm包#
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
#安装#
yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
#验证#
[root@localhost peng]# rpm -qa |grep xtrabackup
percona-xtrabackup-24-2.4.9-1.el7.x86_64

Xtrabackup中主要包含两个工具:xtrabackup 和 innobackupex

xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

常用选项: xtrabackup 工具有许多参数,具体可去官网查询 (xtrabackup 参数选项 | innobackupex 参数选项
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--databases 指定数据库,格式为:–database=“db1[.tb1] db2[.tb2]” 多个库之间以空格隔开
--incremental 创建增量备份
--incremental-basedir 指定作为增量备份的基本数据集的完整备份目录
--incremental-dir 指定了增量备份将与完整备份相结合的目录,以便进行新的完整备份

--redo-only 不回滚未提交事务,在准备基本完整备份和合并除最后一个增量之外的所有增量时,应使用此选项
--copy-back 恢复备份目录

--apply-log 对备份进行预处理操作
--no-timestamp 指定了这个选项备份将会直接存储在 BACKUP-DIR 目录,不再创建时间戳文件夹

xtrabackup 全量备份恢复

完全备份

备份数据存放在/mnt/BACKUP-DIR/下面,innobackupex会自动创建一个文件夹,是当前系统的时间戳

innobackupex --defaults-file=/etc/my.cnf --user=root --password=root /mnt/BACKUP-DIR/

注意:如果你指定了参数--defaults-file,那么此参数就必须位于第一个,否则就会报“–defaults-file must be specified first on the command line”

备份后生成的文件中,除数据库文件外还有几个文件,其中

backup-my.cnf 备份命令用到的配置选项信息;

ib_buffer_pool buffer pool 中的热数据,当设置 innodb_buffer_pool_dump_at_shutdown=1 ,在关闭 MySQL 时,会把内存中的热数据保存在磁盘里 ib_buffer_pool 文件中,位于数据目录下;

ibdata1 备份的共享表空间文件;

xtrabackup_binlog_info mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

xtrabackup_checkpoints 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

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

xtrabackup_logfile 备份的重做日志文件。

恢复全备

恢复备份到mysql的数据文件目录,这一过程要先关闭mysql数据库,重命名或者删除原数据文件目录都可以,再创建一个新的数据文件目录,将备份数据复制到新的数据文件目录下,赋权,修改权限,启动数据库

关闭MySQL服务,备份数据目录或删除数据目录

service mysqld stop

准备(prepare)一个完全备份,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobackupex --apply-log /mnt/BACKUP-DIR/2021-02-18_15-10-39/

恢复数据,将备份数据文件拷贝到数据目录

innobackupex --defaults-file=/etc/my.cnf --copy-back /mnt/BACKUP-DIR/2021-02-18_15-10-39/

completed OK!

更改 mnt/ 目录权限并启动mysql

chown -R mysql.mysql /mnt/BACKUP-DIR
service mysqld start

总结:

  1. innobackupex 全量备份,并指定备份目录路径;

  2. 在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求;

  3. 恢复时,直接使用--copy-back参数进行恢复,需要注意的是,在my.cnf中要指定数据文件目录的路径。

xtrabackup 增量备份恢复

增量备份

在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的。

#做一次增量备份(基于当前最新的全量备份2021-02-18_15-10-39)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --incremental /mnt/BACKUP-DIR/inc --incremental-basedir=/mnt/BACKUP-DIR/2021-02-18_15-10-39/

#第二次增量备份(以增量1为基准2021-02-18_15-15-23)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --incremental /mnt/BACKUP-DIR/inc --incremental-basedir=/mnt/BACKUP-DIR/inc/2021-02-18_15-15-23/

恢复增量备份

#准备基于全量
innobackupex --apply-log --redo-only /mnt/BACKUP-DIR/2021-02-18_15-10-39/

#将增量1应用到完全备份
innobackupex --apply-log --redo-only /mnt/BACKUP-DIR/2021-02-18_15-10-39/ --incremental-dir=/mnt/BACKUP-DIR/inc/2021-02-18_15-15-23/

#将增量2应用到完全备份,最后一次不加 --redo-only 参数了
innobackupex --apply-log /mnt/BACKUP-DIR/2021-02-18_15-10-39/ --incremental-dir=/mnt/BACKUP-DIR/inc/2021-02-18_15-20-45/

#把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据
innobackupex --apply-log /mnt/BACKUP-DIR/2021-02-18_15-10-39/

#恢复
innobackupex --defaults-file=/etc/my.cnf --copy-back /mnt/BACKUP-DIR/2021-02-18_15-10-39/

更改 mnt/ 目录权限并启动mysql

chown -R mysql.mysql /mnt/BACKUP-DIR
service mysqld start

总结:

  1. 增量备份需要使用参数--incremental指定需要备份到哪个目录,使用--incremental-basedir指定全备目录;
  2. 进行数据备份时,需要使用参数--apply-log --redo-only先合并全备数据目录数据,确保全备数据目录数据的一致性;
  3. 再将增量备份数据使用参数--incremental-dir合并到全备数据当中;
  4. 最后通过最后的全备数据进行恢复数据,如果有多个增量备份,需要逐一合并到全备数据当中,再进行恢复。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值