Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL clone plugin 进阶知识

MySQL clone plugin 进阶知识

作者头像
用户1278550
发布于 2023-09-04 04:30:02
发布于 2023-09-04 04:30:02
35100
代码可运行
举报
文章被收录于专栏:idbaidba
运行总次数:0
代码可运行

一 简介

前面一篇文章介绍了 MySQL clone plugin 实践操作 。本文继续深入学习 clone 插件的 相关技术知识。

二 克隆相关的表

performance_schema.clone_status 记录克隆操作的当前状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select * from performance_schema.clone_status \G
*************************** 1. row ***************************
             ID: 1
            PID: 11431
          STATE: Completed
     BEGIN_TIME: 2023-05-22 10:08:33.573
       END_TIME: 2023-05-22 10:08:54.044
         SOURCE: 172.17.28.117:3306
    DESTINATION: /data/mysql/20230522/
       ERROR_NO: 0
  ERROR_MESSAGE:
    BINLOG_FILE:
BINLOG_POSITION: 0
  GTID_EXECUTED:
1 row in set (0.00 sec)

目前测试下来 该表只是记录最近一条克隆记录。

其中要注意的字段:

STATE:克隆操作的状态,Not Started,In Progress,Completed,Failed。如果是Failed状态,ERROR_NOERROR_MESSAGE会给出具体的错误编码和错误信息。

SOURCE 包含 捐赠者的地址 格式为 : IP:PORT

GTID_EXECUTEDBINLOG_FILE/BINLOG_POSITION: 克隆操作结束时,主库已经执行的GTID集合,及一致性位置点,可利用这些信息来搭建从库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from performance_schema.clone_progress;
+------+-----------+-------------+----------------------------+----------------------------+---------+------------+------------+------------+------------+---------------+
| ID   | STAGE     | STATE       | BEGIN_TIME                 | END_TIME                   | THREADS | ESTIMATE   | DATA       | NETWORK    | DATA_SPEED | NETWORK_SPEED |
+------+-----------+-------------+----------------------------+----------------------------+---------+------------+------------+------------+------------+---------------+
|    1 | DROP DATA | Completed   | 2023-05-22 10:08:33.596902 | 2023-05-22 10:08:33.598484 |       1 |          0 |          0 |          0 |          0 |             0 |
|    1 | FILE COPY | Completed   | 2023-05-22 10:08:33.598549 | 2023-05-22 10:08:50.623072 |       8 | 4781624686 | 4781624686 | 4781890105 |          0 |             0 |
|    1 | PAGE COPY | Completed   | 2023-05-22 10:08:50.623252 | 2023-05-22 10:08:50.853804 |       8 |          0 |          0 |        785 |          0 |             0 |
|    1 | REDO COPY | Completed   | 2023-05-22 10:08:50.853871 | 2023-05-22 10:08:51.081509 |       8 |       3584 |       3584 |       4667 |          0 |             0 |
|    1 | FILE SYNC | Completed   | 2023-05-22 10:08:51.081578 | 2023-05-22 10:08:54.043953 |       8 |          0 |          0 |          0 |          0 |             0 |
|    1 | RESTART   | Not Started | NULL                       | NULL                       |       0 |          0 |          0 |          0 |          0 |             0 |
|    1 | RECOVERY  | Not Started | NULL                       | NULL                       |       0 |          0 |          0 |          0 |          0 |             0 |
+------+-----------+-------------+----------------------------+----------------------------+---------+------------+------------+------------+------------+---------------+
7 rows in set (0.00 sec)

其中需要关注的字段:

STAGE:克隆操作包括如下 7个步骤 : DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,RESTART,RECOVERY。

NETWORK:通过网络传输的数据量。如果是本地克隆,该列的值为0。DATA_SPEEDNETWORK_SPEED:当前数据拷贝的速率和网络传输的速率。

三 克隆 的基本原理

MySQL 克隆插件在克隆数据库时主要有以下 4个步骤:

[INIT] ---> [FILE COPY] ---> [PAGE COPY] ---> [REDO COPY] -> [Done]

1、INIT:初始化一个克隆对象。

2、FILE COPY

拷贝所有数据文件。在拷贝之前,会记录一个LSN,作为 "CLONE START LSN",这个 LSN 其实是当前CHECKPOINT的LSN,同时启动 "Page Tracking" 特性。

"Page Tracking"会跟踪 "CLONE START LSN"之后被修改的页,具体来说,会记录该页的Tablespace ID和page ID。数据文件拷贝结束后,会将当前CHECKPOINT的LSN记为 "CLONE FILE END LSN"。

3、PAGE COPY

拷贝“CLONE START LSN”和“CLONE FILE END LSN”之间的页,在拷贝之前,会对这些页进行排序-基于Tablespace ID和page ID,尽量避免拷贝过程中出现随机读写。同时,开启“Redo Archiving”特性。

“Redo Archiving”会在后台开启一个归档线程将Redo文件中的内容按Chunk拷贝到归档文件中。通常来说,归档线程的拷贝速度会快于Redo日志的生成速度。即使慢于,在写入新的Redo日志时,也会等待归档线程完成拷贝,不会出现还未拷贝的Redo日志被覆盖的情况。当所有修改的页拷贝完毕后,会获取实例的一致性位置点信息,此时的LSN记为“CLONE LSN”。

4、REDO COPY

拷贝归档文件中“CLONE FILE END LSN”与“CLONE LSN”之间的Redo日志。

5、Done

调用 snapshot_end()销毁克隆对象。

四 克隆 的相关参数

总共14个参数,这里抽几个常用的参数进行介绍,更详细的信息请参考官方文档 https://dev.mysql.com/doc/refman/8.1/en/clone-plugin-options-variables.html

  1. clone_autotune_concurrency 是否自动调节克隆过程中并发线程数的数量,默认为ON,此时,最大线程数受 clone_max_concurrency 参数控制。若设置为OFF,则并发线程数的数量将是固定的,同clone_max_concurrency参数一致。该参数的默认值为16。
  2. clone_buffer_size 本地克隆时,中转缓冲区的大小,默认4M。缓冲区越大,备份速度越快,相应的,对磁盘IO的压力越大。
  3. clone_block_ddl 如果设置为ON ,开启一个备份锁排它锁,再克隆数据期间阻止 DDL 动作。
  4. clone_ddl_timeout 克隆操作需要获取备份锁(Backup Lock)。如果在执行CLONE命令时,有DDL在执行,则CLONE命令会被阻塞,等待获取备份锁(Waiting for backup lock)。等待的最大时长由clone_ddl_timeout参数决定,默认300(单位秒)。如果在这个时间内还没获取到锁,CLONE命令会失败,且提示“ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction”。需要注意的是,如果在执行DDL时,有CLONE命令在执行,DDL同样会因获取不到备份锁被阻塞,只不过,DDL操作的等待时长由 lock_wait_timeout 参数决定,该参数的默认值为31536000s,即365天。
  5. clone_enable_compression 远程克隆,在传输数据时,是否开启压缩。开启压缩能节省网络带宽,但相应的,会增加CPU消耗。
  6. clone_max_data_bandwidth 远程克隆时,可允许的最大数据拷贝速率(单位MiB/s)。默认为0,不限制。注意,这里限制的只是单个线程的拷贝速率,如果存在多个线程并行拷贝,实际最大拷贝速率=clone_max_data_bandwidth*线程数
  7. clone_max_network_bandwidth 远程克隆时,可允许的最大网络传输速率(单位MiB/s)。默认为0,不限制。如果网络带宽存在瓶颈,可通过该参数进行限速。
  8. clone_valid_donor_list 设置Donor白名单,只能克隆白名单中指定的实例。比如:“HOST1:PORT1,HOST2:PORT2,HOST3:PORT3”. 不允许有空格。

五 克隆 的相关限制

  1. MySQL 8.0.27 之前的版本中,克隆期间,不允许执行DDL命令。同样,DDL会阻塞克隆命令的执行,但是不会阻塞 DML 。

MySQL 8.0.27 之后的版本 默认可以 执行 DDL , 参考参数 clone_block_ddl

  1. MySQL版本包括小版本必须一致,且支持开启 Clone Plugin 才能进行 实例之间的克隆。比如 不能从 5.7 克隆到 8.0 ,因为 8.0.17 版本之后才支持 Clone Plugin。
  2. Clone 操作只会拷贝 捐赠者的 InnoDB 表的表结构和数据,对于非 InnoDB 存储引擎的表,只会拷贝表结构。
  3. 同一时刻只能允许克隆一个实例,不能同时进行多个实例拷贝。
  4. Clone Plugin 不会拷贝 Donor 捐赠者 的配置参数, Recipient 接收者保留自己的参数文件和系统参数。标准化的配置,两边应该保持部分参数的差异,比如server_id 或者 端口。
  5. Donor 实例中如果有表通过 DATA DIRECTORY 指定了绝对路径,在进行本地克隆时,会提示文件已存在。在进行远程克隆时,绝对路径必须存在且有可写权限。
  6. Clone Plugin 不会拷贝Donor的 binlog。
  7. 不支持通过 MySQL Router 连接 Donor 实例。
  8. 执行 CLONE INSTANCE 操作时,不能指定的 Donor 端口为 X Protocol 端口。

其他注意事项:

  1. Recipient 必须有足够的磁盘空间存储克隆数据。
  2. 字符集(character_set_server),校验集(collation_server),character_set_filesystem 必须一致。
  3. innodb_page_size 必须一致,clone 操作会检查 innodb_data_file_path中ibdata的数量和大小,否则新的实例无法启动。
  4. Recipient 接收者在执行完克隆命令之后需要重启,建议 使用 mysqld_safe 启动mysqld 服务进程。如果是通过 mysqld 进行启动,实例关闭后,需要手动启动。

ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

六 参考文章

  1. https://dev.mysql.com/doc/refman/8.1/en/clone-plugin-options-variables.html
  2. https://dev.mysql.com/doc/refman/8.1/en/clone-plugin.html
  3. https://cloud.tencent.com/developer/article/1734140
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 8 新特性之Clone Plugin
Clone Plugin是MySQL 8.0.17引入的一个重大特性,为什么要实现这个特性呢?个人感觉,主要还是为Group Replication服务。在Group Replication中,添加一个新的节点,差异数据的补齐是通过分布式恢复(Distributed Recovery)来实现的。
2020labs小助手
2020/10/29
9530
技术分享 | 实战 MySQL 8.0.17 Clone Plugin
很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮。前者加入了组复制(Group Replication)功能,后者加入了克隆插件(Clone Plugin)功能。今天我们实战测试一下这个新功能。
田帅萌
2019/08/01
1.5K0
技术分享 | 实战 MySQL 8.0.17 Clone Plugin
MySQL Clone Plugin 实现用SQL进行备份
执行INSTALL PLUGIN命令后,会注册到mysql.plugins表中,所以下次重启该实例会自动加载插件,无需再依赖plugin-load-add
田帅萌
2020/04/15
1.2K0
MySQL Clone Plugin 实现用SQL进行备份
mysql clone plugin
默认情况下,远程克隆操作会删除原来接收者的数据,替换为clone的数据,通过Cloning to a Named Directory可以避免删除原来的数据
wangwei-dba
2021/02/08
1.6K0
MySQL 8.0.17 clone插件的使用
mysql8.0.17里 引入了一个clone插件, 可以方便我们快速克隆出一个从库或者MGR的节点:
保持热爱奔赴山海
2019/09/17
1.5K0
【DB宝33】使用MySQL8.0.17的clone技术在线搭建主从复制环境
MySQL 8.0.17的克隆插件允许在本地或从远程 MySQL 实例在线克隆数据,从此搭建从库可以不再需要备份工具(PXB或mysqldump)来实现了。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许使用克隆插件进行 MySQL 服务器配置。
AiDBA宝典
2021/05/06
5630
【DB宝33】使用MySQL8.0.17的clone技术在线搭建主从复制环境
MySQL8 中文参考(二十二)
本节描述了如何安装或卸载ddl_rewriter插件。有关安装插件的一般信息,请参见 Section 7.6.1,“安装和卸载插件”。
ApacheCN_飞龙
2024/06/26
2760
MySQL8 中文参考(二十二)
一篇搞懂MySQL 8.0 Clone技术在线搭建主从复制全过程
墨墨导读:MySQL从8.0.17开始新增了克隆Clone技术,可以在线进行MySQL的本地克隆或远程克隆,从此搭建从库可以不再需要备份工具来实现了,本文分享Clone技术在线搭建主从复制全过程,希望对大家有帮助。
数据和云
2020/06/01
1.1K0
一篇搞懂MySQL 8.0 Clone技术在线搭建主从复制全过程
【DB宝35】使用MySQL 8.0 克隆(clone)插件快速添加MGR节点
MySQL 8.0.17的克隆插件允许在本地或从远程 MySQL 实例在线克隆数据,从此搭建从库可以不再需要备份工具(PXB或mysqldump)来实现了。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许使用克隆插件进行 MySQL 服务器配置。
AiDBA宝典
2021/01/07
2.1K0
【DB宝35】使用MySQL 8.0 克隆(clone)插件快速添加MGR节点
MySQL 8.0 新特性:极速“备份恢复工具”,Clone 插件
备份恢复是 DBA 必备的技能,开源数据库 MySQL 在社区中有不少常用的备份恢复方案,xtrabackup,mypump,mydumper,mysqldump,mysql enterprise backup 等等。但是这些方法多数都是从外部利用各类数据库的机制来完成备份与回复,因此多多少少会存在操作步骤多,备份恢复比较慢等问题。于是 Oracle 在 19 年 7 月下旬发布的 MySQL 的 8.0.17 版本中,加入了一个全新的功能性插件:Clone。这个插件只需要几行 client 命令就可以完成数据库的备份恢复,且花费的时间远也低于常规的备份恢复手段。
王文安@DBA
2020/07/20
3.2K0
MySQL 8.0 新特性:极速“备份恢复工具”,Clone 插件
技术分享 | 从实现原理来看为什么 Clone 插件比 Xtrabackup 更好用?
从 MySQL 8.0.17 版本开始,官方实现了 Clone 的功能,允许用户通过简单的 SQL 命令把远端或本地的数据库实例拷贝到其他实例后,快速拉起一个新的实例。
爱可生开源社区
2024/09/14
1410
技术分享 | 从实现原理来看为什么 Clone 插件比 Xtrabackup 更好用?
MySQL 8.0的新特性-克隆插件
今天在睡觉前想起了MySQL 8.0里面的一个很好的特性,克隆插件。这篇文章介绍的很细致,可以参考。
jeanron100
2019/08/12
1.1K0
MySQL 8.0的新特性-克隆插件
MYSQL Clone 插件,一个等待了多年的功能
那等了这么多年的功能,到底怎么样,到底我们是不是已经可以升级到MYSQL 8 ,目前看还是的等等,主要是最近MYSQL 8 的更新速度太快,很多新功能还在发布中,如果莽然升级会遗漏更多的好功能,例如HASH JOIN。
AustinDatabases
2019/12/24
6330
MYSQL Clone 插件,一个等待了多年的功能
mysql clone 插件使用
用户3202196
2024/10/24
2030
利用 MySQL 克隆插件搭建主从
MySQL 的 Clone 插件是一个强大的功能,首次引入于 MySQL 8.0.17 版本。简单来说,Clone Plugin 是一款物理克隆数据工具,它能够帮助我们快速、高效地克隆或复制数据库,极大地简化了数据库迁移、备份和恢复的过程,让我们在处理大量数据时更加得心应手。本篇文章我们一起来学习下如何使用克隆插件。
MySQL技术
2024/07/12
1830
利用 MySQL 克隆插件搭建主从
MySQL备份与恢复 Xtrabackup
MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupe。
jwangkun
2021/12/23
1.7K0
MySQL备份与恢复 Xtrabackup
使用克隆插件搭建主从复制与组复制拓扑
熟悉MySQL体系结构,擅长数据库的整体调优,喜好专研开源技术,并热衷于开源技术的推广,在线上线下做过多次公开的数据库专题分享,发表过近100篇数据库相关的研究文章。
老叶茶馆
2020/11/26
1.2K0
组复制常规操作-分布式恢复 | 全方位认识 MySQL 8.0 Group Replication
注意:当完成状态传输后,组复制将重新启动joiner节点的数据库进程以完成该过程。如果在joiner节点上设置了group_replication_start_on_boot=OFF,则在数据库进程重新启动完成之后必须再次手动执行START GROUP_REPLICATION语句启动组复制。如果在配置文件中设置了group_replication_start_on_boot=ON和启动组复制所需的其他设置,或者使用了SET PERSIST语句将group_replication_start_on_boot=ON和启动组复制所需的其他设置进行了持久化,则在数据库进程重启之后不需要进行干预,组复制会继续自动执行成员加入组并使其达到ONLINE状态的流程。
老叶茶馆
2020/09/15
1.3K0
MySQL 8.0与MariaDB 10.4,谁更易于填坑补锅?
贺春旸,凡普金科DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一、二版作者,曾任职于中国移动飞信、安卓机锋网。致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。
jeanron100
2019/12/24
2.8K0
MySQL 8.0与MariaDB 10.4,谁更易于填坑补锅?
使用innobackupex进行mysql备份
说明: 使用xtrabackup进行备份需要使用mysql用户,该用户需要有备份的权限。
阿dai学长
2019/04/03
1.2K0
相关推荐
MySQL 8 新特性之Clone Plugin
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档