【MySQL】 Clone Plugin:本地与远程数据克隆全指南
在数据库运维中,数据备份与迁移是核心场景。MySQL 8.0.17 版本引入的 Clone Plugin 彻底改变了传统依赖第三方工具(如 XtraBackup、mysqldump)的局面,支持本地快照与跨服务器克隆,操作简洁且性能优异。本文将从环境配置到实操落地,带您全面掌握这项原生功能。
一、环境准备:克隆前的三大核心配置
使用 Clone Plugin 前,需完成插件安装、配置持久化与权限配置三步操作,确保插件可正常运行并具备合法操作权限。
1.1 动态安装 Clone Plugin
MySQL 支持通过 SQL 命令动态安装 Clone Plugin,无需重启数据库服务。登录 MySQL 后执行以下命令:
install plugin clone soname 'mysql_clone.so';
执行成功后,通过如下命令验证插件安装状态,当plugin_status显示为ACTIVE时,说明插件已正常启用:
select plugin_name,plugin_status from information_schema.plugins where plugin_name = 'clone';
⚠️ 注意:若执行安装命令时报错,需检查 MySQL 版本是否为 8.0.17 及以上,该插件仅在 8.0.17 及后续版本中提供。

1.2 配置持久化:避免重启失效
动态安装的插件在 MySQL 重启后会失效,需通过修改配置文件实现持久化加载。编辑 MySQL 配置文件my.cnf(路径通常为/data/mysql/conf/my.cnf),在[mysqld]节点下添加以下内容:
[mysqld]
# 重启时自动加载Clone Plugin
plugin-load-add=mysql_clone.so
# 强制插件永久启用(防止误卸载)
clone=force_plus_permanent
配置完成后重启 MySQL 服务,插件将随服务自动加载。
1.3 权限最小化配置
为保证数据安全,建议创建专用的备份用户,并仅授予克隆所需的最小权限(backup_admin权限)。执行以下 SQL 命令创建用户并授权:
# 创建克隆专用用户u_clone,允许从任意IP登录(生产环境建议限制IP)
create user 'u_clone'@'%' identified with mysql_native_password by 'gAui8G_a';
# 授予backup_admin权限,该权限仅用于备份与恢复数据,无其他超额权限
grant backup_admin on *.* to 'u_clone'@'%';
生产环境中,建议将 @'%'改为具体的服务器 IP(如@'192.168.184.151'),同时使用复杂度更高的密码(包含大小写字母、数字与特殊符号)。
二、本地克隆:同一服务器的数据快照
本地克隆指在同一台 MySQL 服务器上,将数据克隆到指定目录,适用于本地备份、测试环境数据复制等场景。操作分为 “创建备份目录”“执行克隆”“验证结果” 三步。
2.1 创建备份目录并设置权限
首先在服务器上创建用于存储克隆数据的目录,需确保该目录的属主为mysql(与 MySQL 运行用户一致),否则会因权限不足导致克隆失败:
# 创建多级备份目录
mkdir -p /data/backup/clone
# 修改目录属主为mysql,确保MySQL有权读写该目录
chown -R mysql.mysql /data/backup/clone
2.2 执行本地克隆
使用前文创建的备份用户u_clone登录 MySQL,执行本地克隆命令,指定备份数据的存储路径:
# 登录MySQL(输入密码时按提示输入gAui8G_a)
mysql -u'u_clone' -p'gAui8G_a'
登录后执行克隆命令:
# 本地克隆:将数据克隆到/data/backup/clone/bak_20260210目录
clone local data directory='/data/backup/clone/bak_20260210';
克隆过程耗时取决于数据量大小,执行成功后会返回 “Clone completed successfully” 提示。

2.3 验证克隆结果
通过 Linux 命令查看备份目录下的文件,确认数据已成功克隆:
# 查看备份目录下的文件列表(应包含MySQL数据文件如ibdata1、数据库目录等)
ll /data/backup/clone/bak_20260210/

三、远程备份:跨服务器的数据克隆
远程备份指将源服务器(Donor) 的数据克隆到目标服务器(Recipient) ,适用于跨服务器数据迁移、主从环境搭建等场景。操作需在目标服务器上执行,核心是配置源服务器列表、处理网络连通性问题。
3.1 目标服务器准备:创建备份目录
与本地克隆类似,需在目标服务器上创建备份目录并设置权限:
# 目标服务器执行:创建备份目录
mkdir -p /data/backup/mysql_remote_clone
chown -R mysql:mysql /data/backup/mysql_remote_clone
3.2 配置源服务器列表(目标服务器执行)
在目标服务器上安装 Clone Plugin(步骤同 1.1),并通过clone_valid_donor_list参数指定源服务器的 IP 与端口,告知目标服务器从哪台机器获取数据:
# 1. 安装Clone Plugin(若未安装)
install plugin clone soname 'mysql_clone.so';
# 2. 配置源服务器列表(示例:源服务器IP为192.168.184.151,端口3306)
set global clone_valid_donor_list='192.168.184.151:3306';
若需配置多个源服务器,可用逗号分隔(如 ‘192.168.184.151:3306, 192.168.184.153:3306 ‘)。
3.3 执行远程克隆操作
在目标服务器上执行远程克隆命令,指定源服务器的用户、密码与目标备份目录:
# 远程克隆:从源服务器192.168.184.151克隆数据到目标服务器的/data/backup/mysql_remote_clone/bak_from_184_151目录
clone instance from 'u_clone'@'192.168.184.151':3306 identified by 'gAui8G_a' data directory='/data/backup/mysql_remote_clone/bak_from_184_151';

3.4 克隆进度监控
通过performance_schema.clone_progress查看克隆实时进度:
-- 查看实时进度(阶段、状态、结束时间)
SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
通过performance_schema.clone_status表查看克隆进度与结果,使用\G格式化输出更易阅读:
select * from performance_schema.clone_status\G
关键字段说明:
STATE:克隆状态(如COMPLETED表示成功,FAILED表示失败);ERROR_NO:错误码(0 表示无错误);SOURCE:源服务器地址;DATA_DIRECTORY:目标备份目录。

3.5 常见问题与解决方案
问题 1:端口不通(telnet 测试失败)
执行远程克隆前,建议先通过telnet测试目标服务器与源服务器 3306 端口的连通性:
# 目标服务器执行:测试与源服务器3306端口的连通性
telnet 192.168.184.151 3306
若提示 “Connection refused”,通常是源服务器防火墙阻止了 3306 端口访问,需在源服务器上关闭防火墙或开放 3306 端口:
# 源服务器执行:临时关闭防火墙(生产环境建议开放指定端口而非关闭防火墙)
iptables -F
# 或永久开放3306端口(CentOS 7+示例)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
问题 2:磁盘空间不足
若克隆过程中报错 “Disk full”,需在目标服务器上清理磁盘空间,删除无用文件后重新执行克隆命令:
# 目标服务器执行:查看磁盘使用情况
df -Th
# 进入备份目录,删除无用文件(示例:删除历史备份alldata)
du -sh *
cd /data/backup/
rm -rf alldata alldata_compress
# 重新执行远程克隆命令
clone instance from 'u_clone'@'192.168.184.151':3306 identified by 'gAui8G_a' data directory='/data/backup/clone/bak_from_184_151';
四、Clone Plugin 关键注意事项
使用 Clone Plugin 时,需严格遵守以下限制条件,否则可能导致克隆失败或数据异常:
1. 版本必须完全一致
源服务器与目标服务器的 MySQL 版本必须完全相同(包括大版本与小版本)。例如:
- 支持:8.0.30 → 8.0.30;
- 不支持:8.0.19 → 8.0.20(小版本不同)、8.0.30 → 8.1.0(大版本不同)。
若版本不一致,克隆时会直接报错 “Clone failed: Donor and recipient versions must be identical”。
2. 不克隆服务器配置
Clone Plugin 仅克隆数据文件(如表数据、索引),不克隆 MySQL 的配置文件(my.cnf)与参数(如server_id、port)。若用于搭建主从环境,需手动复制源服务器的my.cnf到目标服务器,并修改server_id(主从server_id必须不同)、log_bin等参数。
3. 仅支持 InnoDB 引擎
Clone Plugin 仅对InnoDB 引擎的表进行完整克隆,其他存储引擎(如 MyISAM、MEMORY)的表会被克隆为空表(仅创建表结构,无数据)。若数据库中存在非 InnoDB 表,需提前通过mysqldump等工具单独备份数据。
4. 克隆期间源服务器只读?
默认情况下,克隆过程中源服务器不会进入只读模式,业务可正常读写数据。但克隆操作会占用源服务器的 CPU、IO 资源,建议在业务低峰期执行克隆,避免影响线上服务。
总结:Clone Plugin 的核心优势
| 特性 | 传统工具(如 mysqldump) | Clone Plugin |
|---|---|---|
| 克隆类型 | 逻辑备份(慢) | 物理快照(快) |
| 跨服务器支持 | 需手动传输文件 | 原生支持远程克隆 |
| 主从搭建 | 需手动记录同步位点 | 自动同步复制坐标 |
| 大数据库适配 | 效率低(GB 级以上) | 高效(直接拷贝文件) |
Clone Plugin 特别适合中小规模数据库(100GB 以内)的快速备份与迁移,以及主从环境的一键搭建。掌握这项原生工具,能显著提升数据库运维效率!



