280_DBA_备份_XBK

举报
alexsully 发表于 2022/01/28 19:05:31 2022/01/28
【摘要】 xbk概述

XtraBackup 全备

1 开始备份时, 记录了重做日志的位置(log scanned up to 1099111111)
2 然后对 innodb引擎表的物理文件, 共享表空间和独立表空间进行 copy操作 (Copying ./xx/xx.ibd)
3 最后记录备份完成后的redo 日志位置 (transaction log of lsn(0,1099111111 ) 同(0,109922222)was copied)


XtraBackup 实现增量备份 (innodb引擎)


1 首先选一个全备, 记录当时的检查点的LSN 
2  在进行增备时, 比较表空间中每个页的LSN 是否大于上次备份的LSN ,如果是 则备份该页, 同时记录当前检查点的LSN 


1 兼容性检查:XBK只支持 MyISAM,InnoDB,CSV,MRG_MYISAM 四种存储引擎的表,其他存储引擎的表不会备份;通过查询tables,若非支持引擎,会打印warning, 表明Xtrabackup不会备份该表。
2 启动redo后台备份线程:从备份实例的最近一次checkpoint LSN的位置开始备份所有增量的redo log,一直持续到备份任务结束
3 加载所有的innodb表空间:打开并扫描所有innodb表的数据文件,检查所有表空间的第一个页面,初始化所有表的内存结构。
4 备份innodb表:遍历步骤3所构建的表的内存结构,备份每一个innodb表的数据文件,备份的过程中会检查每个页面的数据是否正确。
5 备份锁 LOCK TABLES FOR BACKUP影响小,加锁期间innodb表的DML操作不受影响,但是非innodb表的DML及DDL操作仍然是不允许的
6 备份完所有的表文件后,Xtrabackup需要获取binlog GTID信息
7 停止redo备份线程。
8 释放锁资源,备份结束


与FTWRL锁相比,备份锁 LOCK TABLES FOR BACKUP影响很小,加锁期间innodb表的DML操作不受影响,但是非innodb表的DML及DDL操作仍然是不允许的
lock tables for backup   # 申请备份表锁
lock binlog for backup   # 申请二进制日志锁
unlock binlog            # 释放二进制日志锁



对于MySQL 5.x版本,Xtrabackup 2.4.x会执行 LOCK BINLOG FOR BACKUP 操作,对binlog加锁,然后获取GTID信息。
对于MySQL 8.0.x版本,Xtrabackup查询log_status时,MySQL服务器会分别对redo log, binlog等加轻量级锁,获取一致性的redo log LSN以及binlog的GTID;查询完备份一致点后,Xtrabackup会备份最后一个binlog文件,用于恢复时仲裁事务是否需要回滚;最后redo log备份线程任务会在其读取到的redo log的LSN大于查询到的备份一致性点的redo log LSN处停止


1全量备份
xtrabackup --defaults-file=/etc/my.cnf --host=ip --user=root --password=123 --port=3306 --backup --target-dir=/data/backup/full
或者:使用参数--datadir替换掉参数--defaults-file.
# xtrabackup --host=ip--user=root --password=123 --port=3306 --datadir=/data/crm/ --backup --target-dir=/data/backup



 增量备份:
xtrabackup --defaults-file=/etc/my.cnf --host=ip --user=root --password=123 --port=3306 --backup --parallel=4 --target-dir=/data/backup/inc --incremental-basedir=/data/backup/full


2.恢复操作:
2.1 准备全备份的日志:
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full
2.2 准备增量备份的日志:
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full --incremental-dir=/data/backup/inc
2.3 全备份准备:
# xtrabackup --prepare --target-dir=/data/backup/full
2.4 拷回数据:
xtrabackup --copy-back --target-dir=/data/backup/full
2.5 修改数据目录的权限和属性:
service mysqld stop
chown -R mysql:mysql /data/bak1
chmod -R 755 /data/bak1


rm -rf /mydata/data/*
rsync -azP /bakdir/fullback/* /mydata/data
chown -R mysql.mysql /mydata/data/*



创建一个临时目录backupdir。
mkdir backupdir

解压文件。
xbstream -x -p 4 < ./全备文件.qp -C ./backupdir/

5.6和5.7版本执行:innobackupex --parallel 4 --decompress ./backupdir
8.0版本执行:xtrabackup --parallel 4 --decompress --target-dir=./backupdir
删除“.qp”备份文件。
find ./backupdir/ -name '*.qp' | xargs rm -f

应用日志。
5.6和5.7版本执行:innobackupex --apply-log ./backupdir
8.0版本执行:xtrabackup --prepare --target-dir=./backupdir

停止MySQL数据库服务。
service mysql stop
/bin/systemctl stop mysqld.service

备份原来的数据库目录。
mv /var/lib/mysql/data /var/lib/mysql/data_bak

创建新的数据库目录并修改目录权限。
mkdir /var/lib/mysql/data

chown mysql:mysql /var/lib/mysql/data

拷贝全备文件,并修改目录权限。
5.6和5.7版本执行:innobackupex --defaults-file=/etc/my.cnf --copy-back ./backupdir
8.0版本执行:xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=./backupdir
chown -R mysql:mysql /var/lib/mysql/data

xtrabackup的常用参数


基本命令:

--defaults-file:指明服务器的配置文件,此参数必须作为innobackupex的第一个参数,否则报错

--host:指明主机

--user:指明备份的用户名

--password:指明备份用户名的密码

--backup:指明为备份,此参数可以忽略

/tmp/backup:备份的目录

--backup:指明为备份

--apply-log:指明为重做日志

--copy-back:指明为恢复

--slave-info:备份从库的show slave status信息,仅用于在备份从库时使用

--no-lock:不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用

增量备份:

--incremental:指明为增量备份

--incremental-basedir:指明此次的增量备份是基于之前的哪一次备份,增量备份仅适用于innodb和xtradb引擎

--redo-only:再次重做日志,用于增量备份的恢复过程中

--incremental-dir:恢复增量备份时,指明增量备份的目录

部分备份:

--include:使用正则表达式备份匹配到的内容;例:备份mysql库中的user表,--include='^mysql[.]user'

--table-files:如果要备份多个表,可以把多个表以”数据库名.表名“的方式写到文件中,备份时指定此文件

--databases:可以备份整个库,也可以备份库中的某个表,备份表时用”库名.表名“的方式

--export:使用部分备份恢复时用此选项,这和完整备份和增量备份有所区别

高级命令:

xtrabackup在执行备份时,会等待获得全局锁,对于长时间执行的语句,会引发锁争用的问题!

--lock-wait-timeout:指明执行flush tables with read lock前的等待时间,0表示不等待直接执行锁表命令,单位是s,若超过此参数设置的时间后还存在长时间执行的查询,则xtrabackup终止运行

--lock-wait-query-type:可以为all和update;若设置为all,表示等待所有类型的语句执行完成后再执行flush tables with read lock; 若设置update,则表示等待除了select之外sql语句执行完成,再执行锁表操作

--kill-long-queries-timeout:执行flush tables with read lock后等待的秒数

--kill-long-query-type:可以为all和select; 若为all,表示超过等待的秒数,强制终止所有的查询;若为select,表示强制终止select类型的查询
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。