当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL clone plugin怎样复制实例用于测试环境

MySQL clone plugin怎样复制实例用于测试环境

来源:17golang原创 2026-11-04 08:45:04 0浏览 收藏

如果测试环境需要一份接近 donor 实例的数据副本,MySQL Clone Plugin 比逐表导出再导入更直接:在 recipient 上执行 CLONE INSTANCE,数据从远程 donor 传过来。它适合初始化隔离的测试实例,但不是“把生产环境所有配置原样复制”的按钮。

官方地址:https://dev.mysql.com/doc/refman/8.4/en/

下面以 MySQL 8.4 的远程克隆为例。核心判断只有一个:recipient 是否是可以被覆盖或接收新数据的独立实例。默认方式会清理 recipient 的用户数据和二进制日志;如果还要保留当前数据,就使用独立的 DATA DIRECTORY。

先把 donor 和 recipient 分清

donor 是数据来源,recipient 是发起 CLONE INSTANCE 的接收端。远程克隆要求两端的 Clone Plugin 都处于 active 状态,并且 donor 与 recipient 使用同一 MySQL Server 系列、同一操作系统和平台。recipient 还要有足够磁盘空间,且两端的 max_allowed_packet 至少为 2MB。

MySQL Clone Plugin donor 到 recipient 的数据传输关系和权限边界说明图
图1:MySQL Clone Plugin 的 donor、网络传输与 recipient 静态关系说明图,不是运行截图。

先在两端分别确认版本和插件状态。示例中的主机名、账号和密码都是占位值,测试时请换成专用账号,不要把生产账号直接写进脚本。

-- 两端都检查版本;必须先确认属于同一 MySQL Server 系列
SHOW VARIABLES LIKE 'version';

-- 两端都确认 clone 插件已经加载
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME = 'clone';

在 donor 和 recipient 安装插件并准备权限

如果查询不到插件,再由管理账号在两端安装。donor 侧的克隆账号需要 BACKUP_ADMIN,用于读取并传输数据;recipient 侧的克隆账号需要 CLONE_ADMIN,用于替换接收端数据、阻止相应 DDL 并完成自动重启。

-- 仅在插件尚未安装时执行;两端都需要安装
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- donor:创建只用于克隆的账号,并授予读取/传输所需权限
CREATE USER 'clone_donor'@'%' IDENTIFIED BY '替换为强密码';
GRANT BACKUP_ADMIN ON *.* TO 'clone_donor'@'%';

-- recipient:创建接收端账号;CLONE_ADMIN 包含克隆所需的管理能力
CREATE USER 'clone_recipient'@'localhost' IDENTIFIED BY '替换为强密码';
GRANT CLONE_ADMIN ON *.* TO 'clone_recipient'@'localhost';

生产环境不要为了省事使用 '%',应按实际网络来源收窄主机范围。测试环境也应在克隆完成后回收临时账号或至少轮换密码。

让 recipient 允许连接 donor

在 recipient 上设置 clone_valid_donor_list,把 donor 的主机和端口加入允许列表。端口应是经典 MySQL 协议端口;X Protocol 的 mysqlx_port 不用于这条远程克隆语句,MySQL Router 也不能作为 donor 连接入口。

-- 在 recipient 执行;地址应替换为 donor 的真实主机和端口
SET GLOBAL clone_valid_donor_list = 'donor.example.test:3306';

-- 复查 recipient 当前允许的 donor 列表
SHOW VARIABLES LIKE 'clone_valid_donor_list';

-- 检查传输包下限;两端都应至少为 2MB
SHOW VARIABLES LIKE 'max_allowed_packet';

如果 recipient 不能解析 donor 主机名,可以按官方语法使用 IPv4 地址。IPv6 地址不能直接作为这条语句的 host 值,需要使用对应的别名。

默认目录会覆盖测试实例时,谨慎执行 CLONE INSTANCE

登录 recipient 的克隆账号后执行语句。省略 DATA DIRECTORY 时,MySQL 会删除 recipient 数据目录中的用户创建数据和二进制日志,再把 donor 数据复制过来,完成后默认自动重启 recipient。因此这个模式只适合“recipient 可以重置”的独立测试实例。

-- 在 recipient 上执行;该模式会替换 recipient 的用户数据
CLONE INSTANCE FROM 'clone_donor'@'donor.example.test':3306
  IDENTIFIED BY '替换为 donor 克隆账号密码'
  REQUIRE SSL;

REQUIRE SSL 会明确要求传输使用加密连接。如果环境暂时没有满足条件的 TLS 配置,语句会报错;不要把这个报错改成忽略安全要求。省略 SSL 子句时,Clone Plugin 会优先尝试加密连接,再按规则回退。

需要保留 recipient 数据时使用 DATA DIRECTORY

如果测试实例当前还有要保留的用户数据,不要直接在默认数据目录上覆盖。给 recipient 指定一个不存在的绝对路径,Clone Plugin 会把克隆数据写到新目录;这个目录必须由 MySQL 创建,且运行账号要有写权限。

-- 新目录必须是不存在的绝对路径;先确认目录规划和磁盘空间
CLONE INSTANCE FROM 'clone_donor'@'donor.example.test':3306
  IDENTIFIED BY '替换为 donor 克隆账号密码'
  DATA DIRECTORY = '/srv/mysql-test-clone'
  REQUIRE SSL;
MySQL Clone Plugin 默认目录和 DATA DIRECTORY 的覆盖与重启边界说明图
图2:默认数据目录与 DATA DIRECTORY 的数据覆盖、重启和保留边界说明图,不是执行结果。

写入命名目录时不会自动重启 recipient。需要使用这个目录启动另一个测试实例,并由运维脚本负责端口、socket、日志和权限隔离。不要在同一端口上直接启动两个 mysqld。

用 clone_status 处理重启和失败边界

默认数据目录模式会自动重启 recipient,但前提是 recipient 有能够监控 mysqld 停止和启动的 supervisor。若没有 supervisor,克隆数据可能已经传完,却在自动重启阶段返回“restart server failed”;这不等同于数据传输失败,应先手动启动实例,再查看 Clone Plugin 的 Performance Schema 表。

-- recipient 重启后再连接,查看最近一次克隆状态
SELECT STATE, BEGIN_TIME, END_TIME, ERROR_NO, ERROR_MESSAGE
FROM performance_schema.clone_status;

-- 查看阶段明细,定位传输或重启阶段的问题
SELECT *
FROM performance_schema.clone_progress
ORDER BY BEGIN_TIME DESC;

远程克隆同一时间只允许一个克隆操作。网络中断时,donor 会在 clone_donor_timeout_after_network_failure 允许的时间内等待恢复;超过窗口后操作会中止。遇到失败要先判断失败发生在前置检查、数据清理、传输还是重启阶段,再决定修复后重试或从原有备份恢复。

复制完成后别把它当成完整环境快照

Clone Plugin 主要复制数据,不复制 MySQL Server 配置;recipient 会保留自己的配置和持久化系统变量。它也不复制二进制日志,只有 InnoDB 中的数据按该机制复制,MyISAM 和 CSV 表可能以空表形式出现在 recipient。测试环境因此还需要单独准备参数文件、账号策略、端口、依赖服务和脱敏方案。

检查项适合的判断
版本与平台同一 Server 系列、同一操作系统和平台
数据目录可重置就用默认目录;要保留现有数据就用不存在的 DATA DIRECTORY
权限donor 为 BACKUP_ADMIN,recipient 为 CLONE_ADMIN
重启方式默认目录通常自动重启;命名目录需要人工或 supervisor 启动
复制范围不把配置、二进制日志和非 InnoDB 数据当作完整快照

常见问题

为什么 8.0 和 8.4 不能直接克隆?

MySQL 8.4 文档把远程克隆限制在同一 Server 系列内;跨系列克隆不是这条命令的常规用法。测试环境应先统一版本系列,再处理补丁版本和平台条件。

DATA DIRECTORY 路径可以提前创建吗?

不建议。官方语法要求指定的是不存在的绝对路径,MySQL 需要有权限创建它。提前创建或路径不可写都会让前置检查失败。

克隆完成后配置文件为什么没有变?

这是预期行为:Clone Plugin 不负责复制 MySQL Server 配置。把数据复制完成后,还要按测试实例的端口、内存和连接需求单独配置。

把 MySQL Clone Plugin 用于测试环境时,最重要的不是记住一条 SQL,而是先选对 recipient 的数据目录模式:可以清空就明确接受默认目录的覆盖和重启;不能清空就使用独立的 DATA DIRECTORY,并为新实例准备完整的启动隔离条件。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
MySQL roles怎样为只读账号组合最小权限MySQL roles怎样为只读账号组合最小权限
上一篇
MySQL roles怎样为只读账号组合最小权限
MySQL SET RESOURCE GROUP怎样把指定线程切换到目标资源组
下一篇
MySQL SET RESOURCE GROUP怎样把指定线程切换到目标资源组
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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模型性能。
    879次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    875次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    957次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    939次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    766次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码