数据库运维
记录DBA学习成长历程

MySQL物理备份工具xtrabackup(XBK)

xtrabackup(XBK)安装

安装依赖包
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
下载软件并安装
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7
/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64
/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

备份命令介绍

xtrabackup
innobackupex ******自动 计算增量
innobackupex --version

备份方式-物理备份

1.对于非Innodb表(比如 myisam)是,锁表cp数据文件,属于一种温备份。
2.对于Innodb的表(支持事务的),不锁表,拷贝数据页,最终以数据文件的方式保存下来,把一部分redo和undo
一并备走,属于热备方式。

xbk 在innodb表备份恢复的流程

0、xbk备份执行的瞬间,立即触发checkpoint,将内存已经提交事务的脏页,刷新到磁盘idb文件,并记录此时的LSN号
1、备份时,拷贝innodb数据(ibd,frm,ibdata1),记录备份过程中产生的redo和undo也再备份中,也就是checkpoint LSN之后的日志
2、在恢复之前,模拟Innodb“自动故障恢复”的过程,将redo(前滚)与undo(回滚)进行应用
3、恢复过程是cp 备份到原来数据目录下

innobackupex使用

配置文件

vim /etc/my.cnf
最后一行添加
[client]
socket=/tmp/mysql.sock

全备

innobackupex --user=root --password=123456 /data/backup
把屏幕信息导入到备份日志中
innobackupex --user=root --password=123456 /data/backup &>/tmp/xbk.log
-rw-r----- 1 root root 63 Oct 23 12:54 xtrabackup_binlog_info
-rw-r----- 1 root root 117 Oct 23 12:54 xtrabackup_checkpoints
-rw-r----- 1 root root 541 Oct 23 12:54 xtrabackup_info
-rw-r----- 1 root root 2560 Oct 23 12:54 xtrabackup_logfile
xtrabackup_binlog_info (备份时刻的binlog位置)
[root@db01 full]# cat xtrabackup_binlog_info 
mysql-bin.000006 194 7233d683-0932-11eb-9511-000c29159620:1-27
记录的是备份时刻,binlog的文件名字和当时的结束的position,可以用来作为截取binlog时的起点。
mysql [(none)]>select @@server_uuid;
+--------------------------------------+
| @@server_uuid |
+--------------------------------------+
| 7233d683-0932-11eb-9511-000c29159620 |
+--------------------------------------+
xtrabackup_checkpoints :
backup_type = full-backuped
from_lsn = 0 上次所到达的LSN号(对于全备就是从0开始,对于增量有别的显示方法)
to_lsn = 160683027 备份开始时间(ckpt)点数据页的LSN 
last_lsn = 160683036 备份结束后,redo日志最终的LSN
compact = 0
recover_binlog_info = 0
(1)备份时刻,立即将已经commit过的,内存中的数据页刷新到磁盘(CKPT).开始备份数据,数据文件的LSN会停留在to_lsn位置。
(2)备份时刻有可能会有其他的数据写入,已备走的数据文件就不会再发生变化了。
(3)在备份过程中,备份软件会一直监控着redo的undo,如果一旦有变化会将日志也一并备走,并记录LSN到last_lsn。
从to_lsn ---->last_lsn 就是,备份过程中产生的数据变化.
注意:lsn差9个为默认的,其实是一样的
xtrabackup_info汇总信息
自主定制备份路径名
innobackupex --user=root --password=123456 --no-timestamp /data/backup/full &>/tmp/xbk.log

全备的恢复

xbk恢复的时候要求,恢复的数据路径为空
1.准备备份(Prepared)
将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚掉。模拟了CSR的过程
innobackupex --apply-log /data/backup/full
2.恢复备份
前提:
被恢复的目录是空
被恢复的数据库的实例是关闭
innobackupex --copy-back /data/backup/full
chown -R mysql.mysql /data/mysql
systemctl start mysqld
赞(0)
MySQL学习笔记 » MySQL物理备份工具xtrabackup(XBK)