当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL Clone 插件怎么为副本准备一致数据

MySQL Clone 插件怎么为副本准备一致数据

来源:17golang原创 2026-09-27 21:16:39 0浏览 收藏

给已有数据的 MySQL 副本做初始化时,Clone 插件的价值不是“把 SQL 再执行一遍”,而是把 donor 的 InnoDB 物理快照、数据字典和复制坐标交给 recipient。这样副本先落在一个一致位置,再从这个位置继续追二进制日志。它适合大数据量的同系列实例,但默认会清理接收端已有的用户数据与二进制日志,并在克隆完成后重启 MySQL,所以不能把一台正在承载独立数据的实例直接当接收端。

官方文档:https://dev.mysql.com/doc/refman/8.4/en/clone-plugin.html

要点速览
  • donor 与 recipient 必须属于同一 MySQL 系列,并运行在相同操作系统和平台。
  • donor 克隆账号需要 BACKUP_ADMIN,recipient 当前会话需要 CLONE_ADMIN。
  • 克隆会传递二进制日志位置和 gtid_executed,但不会复制二进制日志文件。
  • Clone 只复制 InnoDB 数据;接收端的 MySQL 配置不会被 donor 覆盖。

先把这个小项目的边界定清楚

这里的目标是用一台已有数据的 MySQL 8.4 donor 初始化一台新的 MySQL 8.4 recipient,然后把 recipient 接到同一复制源。两端启用 GTID,recipient 的现有数据允许被覆盖。若是多源复制、跨 8.0 与 8.4 系列、包含必须保留的非 InnoDB 数据,应该换用更合适的数据准备方法。

我第一次把 Clone 当成“更快的备份恢复”时,最容易忽略的就是接收端边界:不指定 DATA DIRECTORY 时,远程克隆会移除接收端用户创建的数据、表空间和二进制日志,再写入 donor 数据并触发重启。这个动作更接近实例置换,而不是把若干表追加进去。

环境准备要同时看兼容、权限与存储

正式执行前,我会先核对两端的版本系列、操作系统和平台、服务器字符集与排序规则、innodb_page_size、innodb_data_file_path、活动插件以及接收端磁盘空间。加密数据还要求安全连接和匹配的文件系统条件;两端 max_allowed_packet 不能低于 2MB。

MySQL Clone donor、recipient、兼容条件与权限边界静态结构图
图1:克隆准备结构图,展示 donor、recipient 与兼容条件之间的静态依赖,不是数据库界面或运行截图。

插件需要在两端启用。下面的示例把 donor 传输权限和 recipient 执行权限分开,生产环境还应按实际主机限制账号来源:

-- donor:安装 Clone 插件并创建只负责提供快照的账号
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
CREATE USER 'clone_donor'@'recipient.example.com' IDENTIFIED BY '替换为强密码';
GRANT BACKUP_ADMIN ON *.* TO 'clone_donor'@'recipient.example.com';

-- recipient:安装插件;当前操作账号需要替换数据并重启实例的权限
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
GRANT CLONE_ADMIN ON *.* TO 'clone_operator'@'localhost';

在接收端发起克隆并预留重启窗口

先把 donor 的经典 SQL 端口加入 recipient 的允许列表,再由具备 CLONE_ADMIN 的接收端会话执行 CLONE INSTANCE。这里使用的是 3306,不是 X Protocol 端口,也不经 MySQL Router。

-- recipient:只允许从指定 donor 地址取得克隆数据
SET GLOBAL clone_valid_donor_list = 'donor.example.com:3306';

-- recipient:发起远程克隆;该语句会使用 donor 账号读取物理快照
CLONE INSTANCE FROM 'clone_donor'@'donor.example.com':3306
IDENTIFIED BY '替换为强密码'
REQUIRE SSL;

默认数据目录模式下,写入完成后 MySQL 会尝试自动重启。recipient 必须由能够监测并拉起 mysqld 的监督进程管理;如果出现 ERROR 3707,它表示自动重启失败,不等同于数据克隆失败。此时应手动启动服务,再查询克隆状态,而不是立刻重新覆盖一次。

克隆完成后确认一致位置

Clone 为复制场景准备的关键不是复制二进制日志文件,而是提取 donor 的二进制日志文件名、位置与 gtid_executed,并传给 recipient。复制元数据表也会随数据目录复制,但接收端自己的服务器配置仍保留。因此,重启后要同时看克隆状态和 GTID,而不能只确认 mysqld 已启动。

-- recipient:确认克隆状态携带的文件位置
SELECT STATE, BINLOG_FILE, BINLOG_POSITION
FROM performance_schema.clone_status;

-- recipient:GTID 模式下确认 donor 的已执行事务集合已经应用
SELECT @@GLOBAL.GTID_EXECUTED;
MySQL Clone 物理快照、复制坐标、接收端配置与复制通道关系结构图
图2:克隆后的复制衔接结构图,区分被复制的数据与坐标、不会复制的日志文件以及接收端保留的配置。

让副本从克隆点继续追平

如果 donor 本身就是拓扑中的副本,并且原通道使用 GTID 自动定位,复制元数据可能允许 recipient 在启动对应通道后继续工作;但我更倾向于明确检查通道指向,避免把 donor 的连接配置不加判断地带到新节点。对于从 source 克隆后新建的 GTID 副本,可显式配置来源:

-- recipient:使用专门的复制账号,并依靠 GTID 自动定位缺失事务
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST = 'source.example.com',
  SOURCE_PORT = 3306,
  SOURCE_USER = 'repl_user',
  SOURCE_PASSWORD = '替换为复制密码',
  SOURCE_AUTO_POSITION = 1;

-- recipient:启动通道后再检查接收线程、应用线程和延迟
START REPLICA;
SHOW REPLICA STATUS;

克隆完成到启动复制之间不要拖太久,因为 recipient 追平所需的二进制日志必须仍保留在 source 上。若这些日志已被清理,复制握手会失败,只能重新准备可用起点。完成后至少确认复制 I/O 与 SQL 线程状态、GTID 是否继续增长,以及业务抽样数据是否符合预期。

什么时候不该用 Clone

场景判断
跨 MySQL 8.0 与 8.4 系列不支持,应换迁移方案
必须保留 recipient 现有数据不要覆盖默认数据目录,可评估命名目录或逻辑迁移
包含关键 MyISAM/CSV 数据Clone 只完整复制 InnoDB,不能作为完整迁移方案
多源副本需要汇聚多个来源数据单个 donor 克隆不能替代多源数据准备
希望同步 donor 的配置文件Clone 不复制服务器配置,recipient 保留自身配置

Clone 会复制 binary log 吗?

不会复制二进制日志文件,但会传递用于复制衔接的文件位置与 GTID 集合。

克隆时 donor 还能写入吗?

Clone 会取得一致物理快照,并在必要阶段协调 DDL;业务写入边界仍应结合版本、并发 DDL 和容量评估安排窗口。

为什么克隆成功后还要检查复制通道?

一致数据只解决起点,后续还依赖来源地址、账号、GTID 模式、日志保留和通道状态。把这几项一起验收,副本才算真正可用。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
苔藓石溪流手机壁纸提示词怎么写苔藓石溪流手机壁纸提示词怎么写
上一篇
苔藓石溪流手机壁纸提示词怎么写
Go errors.Join 为什么格式化后是多行文本
下一篇
Go errors.Join 为什么格式化后是多行文本
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    239次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    288次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    255次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    236次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    45次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码