mysqldump+mydumper+xtrabackup备份原理流程

时间:2022-09-13 10:36:12

mysqldump备份原理

备份的基本流程如下:

1.调用FTWRL(flush tables with read lock),全局禁止读写

2.开启快照读,获取此时的快照(仅对innodb表起作用)

3.备份非innodb表数据(*.frm,*.myi,*.myd等)

4.非innodb表备份完毕后,释放FTWRL锁

5.逐一备份innodb表数据

6.备份完成。

Mydumper

Mydumper原理与Mysqldump原理类似,最大的区别是引入了多线程备份,每个备份线程备份一部分表,当然并发粒度可以到行级,达到多线程备份的目的。

如何保证备份的一致性,其实关键还是在于FTWRL。

对于非innodb表,在释放锁之前,需要将表备份完成。

对于innodb表,需要确保多个线程都能拿到一致性位点,这个动作同样要在持有全局锁期间完成,因为此时数据库没有读写,可以保证位点一致

xtrabackup

innobackupex的基本流程如下:

1.开启redo日志拷贝线程,从最新的检查点开始顺序拷贝redo日志;

2.开启idb文件拷贝线程,拷贝innodb表的数据

3.idb文件拷贝结束,通过"LOCK BINLOG FOR BACKUP"来获取一致性位点;

4.通过LOCK TABLES FOR BACKUP命令来备份非innodb表数据;

5.由于此时没有新事务提交,等待redo日志拷贝完成

6.最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的

7.获取binlog位点,此时数据库的状态是一致的。

8.释放锁,备份结束。

LOCK TABLES FOR BACKUP

作用:备份数据

1.禁止非innodb表更新

2.禁止所有表的ddl

优化点:

1.不会被大查询堵塞(关闭表)

2.不会堵塞innodb表的读取和更新,这点非常重要,对于业务表全部是innodb的情况,则备份过程中DML完全不受损

UNLOCK TABLES

LOCK BINLOG FOR BACKUP

作用:获取一致性位点。

1.禁止对位点更新的操作

优化点:

1.允许DDl和更新,直到写binlog为止。

UNLOCK BINLOG

FTWRL(flush tables with read lock)

无论是哪种备份工具,为了获取一致性位点,都强依赖于FTWRL。这个锁杀伤力非常大,因为持有锁的这段时间,整个数据库实质上不能对外提供写服务的。

由于FTWRL需要关闭表,如有大查询,会导致FTWRL等待,进而导致DML堵塞的时间变长。

即使是备库,也有SQL线程在复制来源于主库的更新,上全局锁时,会导致主备库延迟。

FTWRL这把锁持有的时间主要与非innodb表的数据量有关,如果非innodb表数据量很大,备份很慢,那么持有锁的时间就会很长。

即使全部是innodb表,也会因为有mysql库系统表存在,导致会锁一定的时间。

mysqldump+mydumper+xtrabackup备份原理流程的更多相关文章

  1. mysqldump和xtrabackup备份原理实现说明

    背景: MySQL数据库备份分为逻辑备份和物理备份两大类,犹豫到底用那种备份方式的时候先了解下它们的差异: 逻辑备份的特点是:直接生成SQL语句,在恢复的时候执行备份的SQL语句实现数据库数据的重现. ...

  2. xtrabackup备份原理及流式备份应用

    目录 xtrabackup备份原理及流式备份应用 0. 参考文献 1. xtrabackup 安装 2. xtrabackup 备份和恢复原理 2.1 备份阶段(backup) 2.2 准备阶段(pr ...

  3. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  4. Percona XtraBackup 备份原理说明【转】

    本文来自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MyS ...

  5. MySQL · 物理备份 · Percona XtraBackup 备份原理

    http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...

  6. Percona XtraBackup 备份原理

    前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server 和 ...

  7. xtrabackup备份原理

    Percona XtraBackup工作原理 Percona XtraBackup是基于InnoDB的崩溃恢复功能.复制InnoDB数据文件,导致内部不一致的数据; 但随后它对文件执行崩溃恢复,使它们 ...

  8. MySql在生产环境中是用mysqldump还是xtrabackup备份和恢复数据

    如题,究竟该使用mysqldump还是xtrabackup,要说用,两个都能备份,都支持热备,但是生产环境我们要考虑的是效率,就是不管备份还是恢复,都要快,要稳定. 之前我在维护mysql数据库的时候 ...

  9. XtraBackup 备份原理

    来着淘宝技术: http://mysql.taobao.org/monthly/2016/03/07/ https://github.com/alibaba/AliSQL 前言 Percona Xtr ...

随机推荐

  1. Nginx如何隐藏index.html

    我要隐藏目录下的index.html,修改Nginux配置如下: 1.修改文档顺序 index  index.html index.php 2.开启目录流量 在server或location 段里添加 ...

  2. 17个Web前端开发工程师必看的国外网站

    Web设计是一个不断变化的领域,因此掌握最新的发展趋势及技术动向对设计师来说非常重要,无论是学习新技术,还是寻找免费资源与工具,设计博客都是很不错的去处. 1. Smashing Magazine S ...

  3. POJ 1321 棋盘问题 DFS搜索

    简单搜索 练习一下回溯 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  4. asp&period;net2&period;0安全性&lpar;1&rpar;--用户角色篇&lpar;起篇&rpar;--转载来自车老师

    安全管理的解决方案在.net1.1中几乎为一片空白,对于应用程序的验证与授权大部分的工作是开发人员自己编写代码,或者是借助企业库等工具来实现,此可谓.net1.1中的一大缺憾.在.net2.0中微软为 ...

  5. HTML(八)HTML meta标签&amp&semi;base标签

    HTML meta元素 标签(meta-information)用于提供页面有关的元数据,除了提供文档字符集.使用语言.作者等基本信息外,还涉及对关键词和网页等级的设定.通过设置不同的属性,元数据可以 ...

  6. &lbrack;py&rsqb;&lbrack;mx&rsqb;django的cookie和session操作-7天免登录

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  7. 无视编码都统一转成unicode 然后截断 例如 。&OpenCurlyDoubleQuote;发发发发发发” 操作之后显示为 &OpenCurlyDoubleQuote;发发发发&period;&period;&period;”

    -- local function checkPlayName( str ) -- str = Utils.utf8_to_unicode(str)-- local retStr = "&q ...

  8. 在JAVA中返回类型使用泛型T和Object有什么区别?

    最近在读jackson源码的时候发现有段代码返回类型写的是<T> T,而我自己一般写的是Object.上网搜了下这个语法糖,在*上找到一个比较简单易懂的解释,搬运过 ...

  9. html圈圈

    <html> <head> <meta charset="utf-8" /> <link href="images/style. ...

  10. 关于C&plus;&plus;静态成员函数访问非静态成员变量的问题

    静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存.静态成员函数没有隐含的this自变量.所以,它就无法访问自己类的非静态成员 代码 ...