必须两端插件状态均为ACTIVE、权限分治、配置对齐、recipient显式设置clone_valid_donor_list,缺一不可;否则CLONE INSTANCE会卡住、报错或静默失败。

克隆插件不是“装了就能用”,必须 donor 和 recipient 两端同时满足 ACTIVE 状态、权限分治、配置对齐、白名单显式设置这四个硬性条件,缺一不可;否则 CLONE INSTANCE 会卡住、报错或静默失败。
确认 clone 插件在 donor 和 recipient 上都为 ACTIVE
很多失败源于插件只在一边装了,或状态是 DISABLED。必须两边都查:
- 执行
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
,然后重启 mysqld - 检查
SELECT @@plugin_dir;下是否存在对应文件,且 MySQL 启动用户有读+执行权限(chmod 755)
donor 和 recipient 的权限必须严格分离,不能混用
克隆不走复制权限体系,REPLICATION SLAVE 对 CLONE INSTANCE 完全无效;混授权限会导致 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 端口
执行前必须在 recipient 上设好 clone_valid_donor_list
这是最容易被跳过的一步——recipient 不会自动发现 donor,不设白名单直接报 ER_CLONE_DONOR_NOT_FOUND 或连接超时。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 在 recipient 上执行:
SET GLOBAL clone_valid_donor_list = '192.168.1.10:3306';(格式必须是IP:PORT,不能带协议、不能写域名) - 该变量必须是
GLOBAL级别才生效,SESSION级无效 - 若 donor 是多端口实例(如 binlog server 共享端口),可用逗号分隔:
'192.168.1.10:3306,192.168.1.10:3307' - 克隆过程中 donor 仍可读写,但会短暂加全局读锁(毫秒级)
克隆后 server-uuid 保留但 server-id 需手动重置
克隆完 recipient 自动重启,数据目录被覆盖,但 auto.cnf 中的 server-uuid 被保留——这点关键:若未手动更新,后续 CHANGE REPLICATION SOURCE 会因 UUID 冲突拒绝连接。
- 克隆完成后,recipient 实例已包含 donor 的 GTID 位点和 binlog 坐标,可立刻配主从
- 务必先修改
server-id(不能与 donor 或其他从库重复),再执行:CHANGE REPLICATION SOURCE TO SOURCE_HOST = '192.168.1.10', SOURCE_USER = 'repl', SOURCE_PASSWORD = 'xxx', SOURCE_AUTO_POSITION = 1;
-
innodb_file_per_table必须两端均为ON,否则克隆中途报Invalid tablespace file - 克隆不复制配置参数(如
max_connections)、字符集、binlog 设置,这些需单独校准
真正容易被忽略的是:克隆后 server-uuid 保留但 server-id 不变,而主从复制依赖两者共同唯一标识节点;很多人克隆完直接启动复制,结果 IO 线程卡在 “Connecting to master” —— 其实只是 server-id 冲突没发现。










