hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

xtrabackup备份道理及流式备份运用

2019-11-18杂谈搜奇网43°c
A+ A-

目次

  • xtrabackup备份道理及流式备份运用
    • 0. 参考文献
    • 1. xtrabackup 装置
    • 2. xtrabackup 备份和恢复道理
      • 2.1 备份阶段(backup)
      • 2.2 预备阶段(prepare)
      • 2.3 恢复(copy-back 或move-back)
    • 3. xtrabackup 流式备份运用
    • 4. 总结

xtrabackup备份道理及流式备份运用

0. 参考文献

序号 文献
1 MariaDB/MySQL备份和恢复(三):xtrabackup用法和道理详述
2 MySQL · 物理备份 · Percona XtraBackup 备份道理
3 Streaming and Compressing Backups
4 How Percona XtraBackup Works
5 FLUSH TABLE WITH READ LOCK详解
6 为何要运用FTWRL
7 运用tar+pigz+ssh完成大数据的高效传输

xtrabackup 是一款开源的MySQL备份处置惩罚东西,由percona公司开辟完成。比拟于MySQL企业版的mysqlbackup 和ibbackup功用强大许多。特别供应了当前部门需求的流式备份功用,因而在现在看来xtrabackup是一款异常适宜的MySQL备份东西。本文将从xtrabackup备份的运用与道理角度引见xtrabackup。

1. xtrabackup 装置

xtrabackup可以经由历程多种体式格局装置。本文在这里挑选从https://www.percona.com/downloads/ 下载二进制包的体式格局装置。在网页中可以看到xtrabackup有4个版本可以挑选。这4个版本离别支撑MySQL差别的版本:

  1. 8.0 : MySQL 8.0 以上版本
  2. 2.4 : MySQL 5.7 版本
  3. 2.2 和 2.3 : MySQL 5.1, 5.5 和 5.6

当前线上运用的MySQL版本是5.7版本,因而本文一切的内容都是基于2.4版本生成的。假如读者关于8.0 有兴致,可以浏览其文档:Percona XtraBackup - Documentation

下载下来的文件中,bin目次下会有以下的几个文件:

~/percona-xtrabackup-2.4.15-Linux-x86_64/bin$ ls -la
total 211188
drwxr-xr-x 2 mysql mysql      4096 Oct 12 13:20 .
drwxr-xr-x 6 mysql mysql      4096 Jul  5 16:00 ..
lrwxrwxrwx 1 mysql mysql        10 Jul  5 16:00 innobackupex -> xtrabackup
-rwxr-xr-x 1 mysql mysql   9811072 Jul  5 15:53 xbcloud
-rwxr-xr-x 1 mysql mysql      3020 Jul  5 15:52 xbcloud_osenv
-rwxr-xr-x 1 mysql mysql   5854168 Jul  5 15:53 xbcrypt
-rwxr-xr-x 1 mysql mysql   5942024 Jul  5 15:53 xbstream
-rwxr-xr-x 1 mysql mysql 194628336 Jul  5 15:59 xtrabackup
  1. xbcloud, xbcloud_osenv : 是xtrabackup新的高等特征云备份
  2. xbcrypt : 支撑加密备份
  3. xbstream : 支撑流式备份功用。可以将备份的内容打包并经由历程管道通报
  4. xtrabackup : 是备份功用的主程序
  5. innobackupex : 这个东西在之前的版本中是一个perl剧本,会挪用xtrabackup这个二进制东西。从xtrabackup 2.3最先,该东西运用C言语举行了重写,当前它是xtabackup二进制东西的一个软衔接,然则现实的运用要领却差别,而且在今后的版本中会删除该东西。

由于innobackupex在后续版本中已不存在。因而本文将会重要引见xtrabackup的备份恢复要领和道理。

2. xtrabackup 备份和恢复道理

关于xtrabackup备份和恢复数据的历程整体分为3个阶段:

  1. 备份(backup)
  2. 预备(prepare)
  3. 恢复(copy-back 或move-back)

2.1 备份阶段(backup)

关于MySQL的备份,在大部份的情况下须要完成以下两种范例的数据的备份:

  1. innodb 存储引擎数据的备份。
  2. 非事件引擎的数据备份,比方myisam 引擎数据的备份。

在备份的历程当中数据库基础处于可读写的状况,因而在这时期须要关于变化的数据举行处置惩罚,以便在备份完毕时猎取准确的备份数据。基于上述的斟酌xtrabackup备份的历程重要包含了以下的几个步骤:

  • 拷贝和监控redo log : 在肇端时候,xtrabackup会先猎取MySQL当前时候的LSN,同时最先拷贝redo log至xtrabackup_logfile文件中。由于在备份的历程当中数据库基础处于可读写的状况下,因而redo log会不停的变化,将致使初始拷贝的redo log和MySQL当前的redo log不一致。所以在xtrabackup背景,还会启动别的的一个历程延续监控redo log文件的变化。假如监控到文件发生变化,则将其写入到xtrabackup_logfile中。这个历程会一向存在并实行监控redo log的变化,直到备份将完毕为止。

  • 拷贝innodb相干文件:拷贝包含ibdata1(同享表空间)和*.idb(假如开启了自力表空间的话)相干的文件。

  • 加备份锁:由于非innodb表没有redo log可供拷贝,所以在备份非innodb表之前须要对数据库加锁,以防备在备份历程当中数据被修正。在这里须要先简朴的引见下备份锁的观点。在种种备份东西备份数据库的历程当中,为了猎取一致性备份(binlog位置与数据婚配),须要在备份的历程当中加上备份锁。在MySQL中会运用FLUSH TABLES WITH READ LOCK简称(FTWRL)来猎取一致性备份。FTWRL会实行以下的几个操纵(更详细的引见和相干道理可以拜见FLUSH TABLE WITH READ LOCK详解):

  1. 上全局读锁(lock_global_read_lock):壅塞一切的更新操纵。
  2. 清算表缓存(close_cached_tables):封闭表缓存。
  3. 上全局COMMIT锁(make_global_read_lock_block_commit):壅塞活泼的事件提交。

FTWRL的操纵中会壅塞包含innodb在内的一切存储引擎的更新操纵。在FTWRL实行的历程当中,全部数据库相当于只读形式。可见假如在线上数据库中(特别在负担线上读写营业的数据库下),运用FTWRL可能会致使线上数据库长时间堕入不可写入的状况。关于这个题目percona版本的MySQL做出了优化,将FTWRL 分为了几个部份:

  1. lock table for backup : 这个锁会壅塞一切对非事件表的更新及一切DDL行动,然则innodb表的读写可以继承实行。
  2. lock binlog for backup:做锁会阻挠binlog更新,因而此时一切的DML操纵都邑被壅塞。

可以看出假如在备份的历程当中,将FTWRL拆解成如上的2步操纵,则在备份非事件表的历程当中可以不壅塞事件表的更新。关于xtrabackup假如备份的数据库是不支撑backup lock的版本,则运用FTWRL操纵。而假如是支撑backup lock的版本,则运用lock tables for backup猎取轻量级的backup locks来替换FTWRL。

  • 拷贝非innodb表文件。
  • 猎取binlog一致性位置:在拷贝完一切的数据以后,备份进入扫尾阶段。在这里依据是不是支撑backup lock分为差别的操纵。关于不支撑backup lock的版本,直接猎取binlog的一致性坐标点同时完毕redo log的监控和拷贝并开释锁。而关于支撑backup lock的版本,先经由历程lock binlog for bakcup来猎取binlog日记锁,然后完毕redo log的监控和拷贝,再unlock tables开释表锁,随后猎取二进制日记的一致性位置坐标点,末了unlock binlog开释binlog日记锁。
  • 完毕备份退出。

2.2 预备阶段(prepare)

在恢复备份之前须要对数据举行一些处置惩罚,在xtrabackup中称之prepare。这个步骤的重要事情就是将之前纪录的redo log运用到innodb的数据中,使得innodb中的数据终究和备份完毕的时候一致。这个步骤不须要在有MySQL的机械上运转,xtrabackup本身完成了一个简化版本的innodb引擎,经由历程它完成redo log的运用。

2.3 恢复(copy-back 或move-back)

在末了一步,xtrabackup会将数据copy 或许move (假如DBA不盘算保存备份数据)到数据库对应的目次下。一样这步也不须要MySQL启动或许存在,可以在任何机械上实行。然则请求对应的数据库目次下是空的,不存在任何的文件。

末了依据如上的叙说可以归结总结以下:

3. xtrabackup 流式备份运用

当前关于部门的MySQL集群存在以下的痛点:

  1. 备份磁盘空间不足:跟着线上数据的增进,大部份MySQL数据库都没有预留充足的备份空间,因而当前每次在当地备份数据都邑致使磁盘空间报警。在DBA处置惩罚不实时的情况下,轻易致使磁盘空间占满而影响效劳。

而xtrabackup正好有流式备份的功用,可以处置惩罚当前DBA的痛点。因而本小节将重要引见下xtrabackup的流式备份功用(stream形式)。

当前 xtrabackup支撑2种体式格局的流式备份:

  1. tar花样(ps : tar 和ssh另有许多有意思的功用,详细可以参考运用tar+pigz+ssh完成大数据的高效传输 )
  2. xbstream花样

在测试xtrabackup备份功用之前须要先预备下试验环境。

机械 IP CPU 磁盘 内存
机械1 192.168.100.1 40核 1.1T SSD(已运用60%) 64G
机械2 192.168.100.2 40核 1.1T SSD(空盘) 64G

须要完成的操纵是从机械1备份数据到机械2,而且不占用机械1底本不多的盈余磁盘空间。为了可以运用流式备份功用,起首须要在机械2上完成以下2个步骤:

  1. 设置从机械1免密ssh登录机械2。
  2. 在机械2上竖立寄存备份的目次,本例中途径为/ssd/100_1_bak/

tar花样的备份可以挑选运用gzip或许不紧缩。在本例中离别运用以下敕令完成:

xtrabackup --safe-slave-backup --slave_info --user='root' --password='XXXXXX'  --backup   --tables-file=./tb.txt  --stream=tar  | ssh  root@192.168.100.2  "cat -  | tar -x -C /ssd/100_1_bak/"   #### tar 不紧缩
xtrabackup --safe-slave-backup --slave_info --user='root' --password='XXXXXX'  --backup   --tables-file=./tb.txt  --stream=tar  |pigz | ssh -p32200 mysql@192.168.100.2  " gzip -d   | tar -x -C /ssd/100_1_bak/"  ### 运用tar 流 并交给 gzip 紧缩传输

ps : xtrabackup没有选项只备份innodb表或许myisam表。然则可以经由历程选项指定备份的表。在本例中经由历程--tables-file选项,将须要备份的innodb表写入tb.txt文件中举行备份。生成tb.txt的内容可以运用以下的sql语句取得:

select CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)  FROM information_schema.TABLES   WHERE   ENGINE = 'InnoDB'    AND ENGINE IS NOT NULL     AND TABLE_SCHEMA NOT IN (   'mysql',    'performance_schema',  'information_schema',  'sys') ;

假如运用xbstream花样,则可以运用以下的敕令:

xtrabackup --safe-slave-backup --slave_info --user='root' --password='XXXXXX'  --backup   --tables-file=./tb.txt  --stream=xbstream  | ssh -p32200 mysql@192.168.100.2  "cat -  | xbstream  -x -C /ssd/100_1_bak/" ### xbstream不紧缩
xtrabackup --safe-slave-backup --slave_info --user='root' --password='XXXXXX'  --backup   --tables-file=./tb.txt  --stream=xbstream  --compress   | ssh -p32200 mysql@192.168.100.2  "cat -  | xbstream  -x -C /ssd/100_1_bak/" ### 运用--compress选项紧缩

4. 总结

本文重要引见了xtrabackup备份的道理以及流式备份功用。限于本文的作者程度有限,文中的毛病在所难免,恳请人人批评指正。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
xtrabackup备份道理及流式备份运用

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282372.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>