zoukankan      html  css  js  c++  java
  • xtrabackup VS clone plugin

    由于之前开源社区版本的 MySQL 并没有提供物理备份的机制,所以数据库备份大多使用逻辑备份工具 mysqldump 。
    然而,mysqldump 是单线程备份,串行地从数据库中一张张导出表中的记录,备份速度是该工具最大的问题。
    好在开源社区提供了 mydumper 工具,一种并行的逻辑备份工具,极大解决了逻辑备份的速度问题。但随着单个实例数据库容量的不断增长,单实例500G、1T已经不再少见,通过逻辑备份工具备份和恢复 MySQL 速度依然难以让生产用户满意,特别是在克隆一个新的 MySQL 节点时。Percona 公司提供开源的 Xtrabackup 工具,用以对 MySQL 数据库进行物理备份,使用的用户也蛮多。但这个工具使用中翻车的情况也不少,见:Xtrabackup备份原理实现细节——对淘宝数据库内核月报的补充因为相比逻辑备份,物理备份是需要侵入数据库内核,对比逻辑备份工具 mydumper,这个难度提升了远远不止一个等级。终于,现在社区版 MySQL 提供了物理备份/克隆的工具 Clone Plugin。
    Clone Plugin

    Clone Plugin 是 MySQL 8.0.17 版本推出一个插件,用于进行数据库的物理备份,但官方用 Clone (克隆)而不仅仅是 Backup 描述插件的功能。需要强调的是,Clone Plugin 只备份 InnoDB 存储引擎表,其他类型表不进行备份。BTW,其他存储引擎 MySQL 官方后续也不会提供开发和维护,应尽快迁移到 InnoDB 存储引擎 —— 这个星球上最伟大的关系型事务存储引擎。
    接着,我们先看下 Xtrabackup 物理备份的过程:

    上图显示了 15:00 ~ 15:30 进行 Xtrabackup 物理备份的过程,总共用时 30 分钟,其中经历4个过程:

    1. 重做日志文件拷贝;

    2. InnoDB 文件拷贝;

    3. 保存二进制日志点位(通过加FTWRL全局锁)

    4. 拷贝其他非 InnoDB 文件;

    特别要指出的是,Xtrabackup 的备份过程中 redo copy 的这个过程是持续整个备份周期的,即 redo copy 进行了几乎整整30分钟。若通过备份文件进行恢复,恢复到的时间点是15:30。
    好了,让我们看看官方的物理备份 Clone Plugin 是如何实现的:

    从上图可以发现,Clone Plugin 很不同的一点是 redo copy 的过程非常短,不需要备份30分钟内所产生的所有 redo log。这意味着通过 Clone Plugin 恢复物理备份的速度要远远快于 Xtrabackup 。在 redo copy 前有一个 page copy,这是 Xtrabackup 所没有的步骤。也就是在备份完 InnoDB 磁盘文件后,Clone Plugin 还会对 Buffer Pool 中的脏页进行备份,这样就可以减少对于 redo 日志的拷贝。脏页的备份会先对(space,page_no)排序,以比较顺序的方式写入备份文件。同时,为了记录在拷贝脏页过程中,又有新的变化产生,所以在 file copy 后启用 page tracking 的机制,记录当前已经 Checkpoint 完成的 LSN。后续的redo copy 只需要拷贝该 LSN 之后的重做日志即可。总结来看,对比 Xtrabackup,Clone Plugin 额外实现了以下几个功能:

    1. page copy:拷贝脏页,减少重做日志的备份量,提升恢复速度;

    2. page tracking:记录 LSN 的变化,用于后续重做日志的备份;

    3. redo archiving:备份重做日志,避免重做日志文件写入太快,覆盖写入无法备份的场景,这点Xtrabackup就无能为力了;

    最后,Clone Plugin 的一大优势是远程备份。
    不可否认,在 Xtrabackup 中也可以实现流式物理备份到远程服务器,但其需打通 ssh 的免密登录,这在生产环境是很难被允许的操作,往往会触发安全红线。

    Clone Plugin 通过 MySQL 通信协议,可直接将物理备份文件备份到远程 MySQL 实例,甚至直接恢复出一个实例,这在做节点 Clone 时,简直太香了!其中备份的目标 MySQL 实例称为 Donor(捐赠者);远程接受的实例称为 Recipient(接收者)。
    远程备份的原理和上述分析的 Clone Plugin 备份原理一样,只是将备份文件通过 MySQL 通信协议传送到了远程 Recipient 服务器中。

    Clone Plugin 的限制

    Clone Plugin 虽好,但也有一些限制。
    进行远程克隆的两个 MySQL 实例版本号必须完全一样。5.7 和 8.0 显然不行,8.0.19 和 8.0.20 小版本不同也不行。
    MySQL 8.0.27 版本前不允许 DDL 操作,DDL 操作会被阻塞,甚至影响后续的 SELECT查询操作;MySQL 8.0.27 版本已经可以在备份过程中进行并发的 DDL 操作。Clone Plugin 不备份 MySQL 配置文件,而 Xtrabackup 是备份的。更多关于 Clone Plugin 的使用限制可见:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-limitations.html

    转载自姜老师博客

    螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。 --章怀柔
  • 相关阅读:
    做题记录
    关于有向图强连通分量的一点想法
    浅谈二分图匹配(未完)
    水题狂欢赛 (爬楼梯赛)题解(偏向自我反省)
    浅谈迭代加深(iddfs)
    浅谈单调队列优化
    [cqbzoj#10644]鱼肉炸弹题解
    树形背包[2/ 50] luogu [P1273]
    树形背包[1/ 50] luogu [P2015] (超级板)
    (树状数组)区间修改,区间查询
  • 原文地址:https://www.cnblogs.com/lovezhr/p/15560049.html
Copyright © 2011-2022 走看看