clone instance能在5–10分钟内完成tb级从库部署,但需插件状态为active、donor具备backup_admin+replication slave权限、recipient具备clone_admin权限、两端版本及innodb_file_per_table配置一致、clone_valid_donor_list正确设置、datadir为空且server-uuid手动更新。

MySQL
编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。
下载
CLONE INSTANCE 能在 5–10 分钟内完成 TB 级从库部署,但前提是插件真正激活、权限严格分治、配置完全对齐——跳过任一环节都会卡住或静默失败。
确认 clone 插件状态为 ACTIVE
插件不是“装了”就等于“能用”,很多报错其实卡在这一步。
执行
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';,结果中
PLUGIN_STATUS 必须是
ACTIVE;若为
DISABLED 或空行,说明没加载成功
动态安装命令是
INSTALL PLUGIN clone SONAME 'mysql_clone.so';(Linux)或
INSTALL PLUGIN clone SONAME 'mysql_clone.dll';(Windows),但仅当前会话有效,重启即失效
永久生效必须写进
my.cnf:
[mysqld]
plugin-load-add = mysql_clone.so
clone = FORCE_PLUS_PERMANENT
检查
SELECT @@plugin_dir; 路径下是否存在
mysql_clone.so 文件,MySQL 启动用户需有读+执行权限(
chmod 755)
SELinux 或 AppArmor 可能拦截加载,临时用
setenforce 0 验证是否为此类问题
远程克隆必须两端配对设权限,不能混用账号
克隆不走复制权限体系,
REPLICATION SLAVE 权限完全无效,混用会导致
ERROR 3095 (HY000): Insufficient privileges
donor(源库)用户需具备:
BACKUP_ADMIN(必需)、
REPLICATION SLAVE(后续配主从用)
recipient(目标库)用户需具备:
CLONE_ADMIN(隐含
BACKUP_ADMIN +
SHUTDOWN),仅给
BACKUP_ADMIN 不行
账号必须在 donor 和 recipient 上**都存在、密码一致**,且执行
GRANT 后要
FLUSH PRIVILEGES
donor 的
bind_address 不能是
127.0.0.1,得设为
0.0.0.0 或具体内网 IP,并确保防火墙放行 3306 端口
执行前必须设 clone_valid_donor_list
这是最容易被跳过的一步:recipient 不会自动发现 donor,不设白名单直接报
ER_CLONE_DONOR_NOT_FOUND 或连接超时
在 recipient 上执行:
SET GLOBAL clone_valid_donor_list = '192.168.1.10:3306';(格式必须是
IP:PORT,不能带协议、不能写域名)
该变量是 global 级别才生效,session 级无效;若 donor 是多端口实例,用逗号分隔:
'192.168.1.10:3306,192.168.1.10:3307'
innodb_file_per_table = ON 是强制前提,否则克隆中途报
ER_CLONE_DONOR_NOT_SUPPORTED 或
Invalid tablespace file
recipient 的
datadir 必须为空(不能有
ibdata1、
mysql 库等),否则报
ERROR 3866 (HY000): Clone directory is not empty
克隆完成后必须手动校准 server_uuid 和复制配置
CLONE INSTANCE 执行完,recipient 实例会主动退出并由 systemd /
mysqld_safe 拉起——这是设计行为,不是异常
但
auto.cnf 中的
server_uuid **不会被覆盖**,必须手动删掉或改写,否则后续
CHANGE REPLICATION SOURCE TO 会因 UUID 冲突拒绝连接
gtid_executed 是 donor 克隆时刻的快照值,但
log_bin、
binlog_format、
server_id 等配置不会复制,需提前在 recipient 的
my.cnf 中配好
SHOW SLAVE STATUS 必为空,必须手动执行
CHANGE REPLICATION SOURCE TO SOURCE_HOST='x.x.x.x', SOURCE_USER='repl', SOURCE_PASSWORD=... 并启用
SOURCE_AUTO_POSITION = 1
版本必须完全一致(包括补丁号),
SELECT VERSION() 两边比对,
8.0.33 →
8.0.33 可行,
8.0.33 →
8.0.34 会触发
ER_CLONE_DONOR_VERSION_MISMATCH
最易忽略的是:克隆后
server_uuid 未更新、
my.cnf 中复制参数缺失、
clone_valid_donor_list 没设 global 级——这三个点出错,整个流程就停在“看似成功实则不可用”的状态。