MySQL物理备份恢复实战之XtraBackup

MySQL物理备份恢复实战之XtraBackup

逻辑备份是SQL文件,可编辑。

物理备份就是二进制文件,不可编辑,数据库的一个副本(逻辑备份时SQL文件,可编辑)

特点:

  1. 有数据文件和目录组成,是mysql数据目录的全部/拷贝

  2. 速度快,文件复制

  3. 备份粒度小

  4. 除了备份数据以外,还可以备份日志和配置文件

适合场景:

最适合大数据量的备份,比如百GB,TB级……

物理备份方法:

  1. xtrabackup(percona公司开源免费的,早期对应的官方收费版本innobackup)

  2. mysql enterprise backup(MEB/mysqlbackup),官方收费

  3. 其他:cp/tar/scp/rsync,最适合停机复制和拷贝,

  4. mylvmbackup: lvm-snapshot:基于LVM快照的备份,比较麻烦,早期使用,替代品:mysqlbackup+xtrabackup

  5. mysqlhotcopy:只针对myisam,不支持innodb,已经被废弃,替代品就是mysqldump+mysqlbackup

xtrabackup

说明

在2.3.3版本之前备份会产生死锁,2.3.3之后就不再死锁了,如果在mysql5.7以后使用,需要使用2.4.4才可以。

优点:

  1. 支持官方mysql、percona、mariadb,只支持linux,不支持Windows

  2. 支持在线热备,不会影响正在执行的事务,对服务器不会带来性能问题

  3. 备份速度快

  4. 支持压缩

  5. 支持加密

  6. 支持自动实现备份验证校验

  7. 恢复速度快

  8. 支持在线迁移表

  9. 支持创建一个slave从库

  10. 支持并行

  11. 支持全备,增量备份,部分备份

缺点:

  1. 不支持脱机备份

  2. 不支持直接备份到磁盘设备

  3. 不支持云备份

  4. 如果备份myisam,还存在阻塞

2.4版本中,innobackupex功能全部集成到xtrabackup里面,innobackupex作为xtrabackup的一个软链接,xtrabackup也支持非innodb表,在下一个版本中,官方信息是说要把innobackupex从产品中移除。

xtrabackup产品有两个工具命令:innobackupex,xtrabackup

  1. xtrabackup主要备份innodb和xtraDB两种表

  2. innobackupex则封装了xtrabackup,同时可以备份myisam数据表

下载和安装

https://www.percona.com/downloads

image-20230809234409991

[root@itpuxdb app]# pwd
/mysql/app
[root@itpuxdb app]# ll percona-xtrabackup-2.4.11-Linux-x86_64.libgcrypt145.tar.gz 
-rw-r--r-- 1 root root 83477311 Oct  4  2021 percona-xtrabackup-2.4.11-Linux-x86_64.libgcrypt145.tar.gz
[root@itpuxdb app]# 
#做软连接
[root@itpuxdb app]# ln -sf percona-xtrabackup-2.4.11-Linux-x86_64 xtrabackup
[root@itpuxdb app]# ll
total 81548
drwx------ 2 mysql mysql    16384 Jan 31  2021 lost+found
lrwxrwxrwx 1 mysql mysql       35 Jan 31  2021 mysql -> mysql-5.7.20-linux-glibc2.12-x86_64
drwx------ 9 mysql mysql     4096 Jan 31  2021 mysql-5.7.20-linux-glibc2.12-x86_64
drwxrwxr-x 6 root  root      4096 Apr 19  2018 percona-xtrabackup-2.4.11-Linux-x86_64
-rw-r--r-- 1 root  root  83477311 Oct  4  2021 percona-xtrabackup-2.4.11-Linux-x86_64.libgcrypt145.tar.gz
lrwxrwxrwx 1 root  root        38 Aug  9 23:48 xtrabackup -> percona-xtrabackup-2.4.11-Linux-x86_64
[root@itpuxdb app]# 
#相关的命令
[root@itpuxdb bin]# pwd
/mysql/app/xtrabackup/bin
[root@itpuxdb bin]# ll
total 223212
lrwxrwxrwx 1 root root        10 Aug  9 23:47 innobackupex -> xtrabackup     # innobackupex链接到xtrabackup但是两者的命令和帮助信息都是不一样的
-rwxr-xr-x 1 root root   5095024 Apr 19  2018 xbcloud			#用于云上传和下载等
-rwxr-xr-x 1 root root      3020 Apr 19  2018 xbcloud_osenv		#云上的操作
-rwxr-xr-x 1 root root   4981729 Apr 19  2018 xbcrypt			#用于加密的
-rwxr-xr-x 1 root root   5046774 Apr 19  2018 xbstream			#基于流备份的
-rwxr-xr-x 1 root root 213434185 Apr 19  2018 xtrabackup
[root@itpuxdb bin]# 


#修改环境变量
vi ~/.bash_profile
PATH=$PATH:/mysql/app/mysql/bin:/mysql/app/xtrabackup/bin:$HOME/bin
source ~/.bash_profile


#检查版本
[root@itpuxdb bin]# xtrabackup --version
xtrabackup version 2.4.11 based on MySQL server 5.7.19 Linux (x86_64) (revision id: b4e0db5)
[root@itpuxdb bin]# 

相关参数介绍

备份相关参数
innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS]
[--compress-chunk-size=CHUNK-SIZE]
[--encrypt=ENCRYPTION-algorithm]
[--encrypt-threads=NUMBER-OF-THREADS] [--encrypt-chunk-size=CHUNK-SIZE]
[--encrypt-key=LITERAL-ENCRYPTION-key] |
[--encryption-key-file=MY.KEY]
[--include=regexp] [--user=name]
[--password=WORD] [--port=port] [--socket=socket]
[--no-timestamp] [--ibbackup=IBBACKUP-binary]
[--slave-info] [--galera-info] [--stream=tar|xbstream]
[--defaults-file=MY.CNF] [--defaults-group=group-name]
[--databases=list] [--no-lock]
[--tmpdir=directory] [--tables-file=file]
[--history=name]
[--incremental] [--incremental-basedir]
[--incremental-dir] [--incremental-force-scan]
[--incremental-lsn]
[--incremental-history-name=name]
[--incremental-history-uuid=uuid]
[--close-files] [--compact]
backup-ROOT-DIR
准备阶段的参数
innobackupex --apply-log [--use-memory=B]
[--defaults-file=MY.CNF]
[--export] [--redo-only] [--ibbackup=IBBACKUP-binary]
backup-DIR
还原恢复方面的参数
innobackupex --copy-back [--defaults-file=MY.CNF]
[--defaults-group=group-name] backup-DIR
innobackupex --move-back [--defaults-file=MY.CNF]
[--defaults-group=group-name] backup-DIR
解压解密方面的参数
innobackupex [--decompress] [--decrypt=ENCRYPTION-algorithm]
[--encrypt-key=LITERAL-ENCRYPTION-key] |
[--encryption-key-file=MY.KEY]
[--parallel=NUMBER-OF-FORKS] backup-DIR

XtraBackup 备份恢复的流程与原理

xtrabackup支持innodb表,实际工作中是用innobackupex,这个命令下个版本就被废弃了。

innobackupex脚本用来备份非innodb的

xtrabackup脚本备份innodb表

innobackupex和xtrabackup是互通的。如果用innobackupex来备份,如果有innodb的表,innobackupex就会自动调用xtrabackup。

早期xtrabackup工具是由Perl和c同时写的两个进程,导致两个之间通信不好,在2011年时候用c重写了innobackupex,这个时候innobackupex功能全部集成到xtrabackup。为了兼容就做了一个软连接,

xtrabackup 完全备份的流程

第1步: start xtrabackup_log:

innobackupex 开启xtrabackup_log 监控线程,实时监测redo log 文件的变化,将新备份过程中新写入到事务日志中的日志拷贝到innobackup_log(xtrabackup_log)文件中;同时开启xtrabackup 拷贝线程,开始拷贝innodb 文件。

第2步: copy .ibd,ibdata1/2/3:

开始拷贝innodb 文件

第3步: 在复制innodb 文件结束后,进行flush tables with read lock;

第4步: 拷贝非innodb 文件,copy .frm; myd; myi,misc files 等非innodb 类型的文件。

第5步: 记录当前的binlog log position

第6步: 表解锁:unlock tables;

第7步: 停止xtrabackup_log 监控线程。

xtrabackup 完全恢复的流程
-- oracle:先restore 还原文件,再recover 数据一致性。
-- mysql:先prepare(recover)数据一致性,再copy(restore)还原文件。

第1步: 对全备份文件进行xtrabackup_log 日志回放,并对提交的事务进行重做(apply redo log recored),同时回滚未提交的事务(undo space)。这个过程叫prepare 阶段(类似于Oracle 的recover 过程),xtrabackup 会执行crash恢复。

– 在prepare 过程中,恢复备份集的日志,会启动一个mysqld 的服务进程,来做恢复实现一致性。

– 这个过程只针对innodb 表,非innodb(myisam)数据是不恢复的。所以建议以后不要再用myisam

第2步: 将全备文件复制到mysql 下的data 目录中。(所有的)

xtrabackup 增量备份的流程(用得少)

第1步: start xtrabackup_log:

innobackupex 开启xtrabackup_log 监控线程,实时监测redo log 文件的变化,将新备份过程中新写入到事务日志中的日志拷贝到innobackup_log(xtrabackup_log)文件中;同时开启xtrabackup 拷贝线程,开始拷贝innodb 文件。

第2步: 开始拷贝自上次innodb 备份后变化的数据页,条件是:当前的lsn > 上次全备/增量xtrabackup_checkpoints 中的lsn

第3步: copy .ibd,ibdata1/2/3:

开始拷贝innodb 文件

第4步: 在复制innodb 文件结束后,进行flush tables with read lock;

第5步: 拷贝非innodb 文件,copy .frm; myd; myi,misc files 等非innodb 类型的文件。

第6步: 记录当前的binlog log position

第7步: 表解锁:unlock tables;

第8步: 停止xtrabackup_log 监控线程。

xtrabackup 增量恢复的流程

第1步: 恢复全备(prepare)

第2步: 恢复增量,对未提交的事务进行回滚

第3步: 对全备与增量备份合并后的文件进行apply_log

第4步: 将备份文件拷贝到mysql data 目录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值