灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

    • MySQL 运维知识地图:从入门配置到高可用排障
    • MySQL8 配置文件 my.cnf 重要参数解读
    • MySQL 导出 CSV 中文乱码:字符集链路从头讲一遍
    • MySQL 角色管理
    • MySQL网络抓包审计
    • MySQL 性能压测:Sysbench 1.0 实战
    • MySQL Router 实现读写分离
    • Gh-ost重建表,清除表碎片率
    • MySQL MGR配合MySQL-router实现innodb-cluster
    • MySQL 快速分析binlog定位问题
    • MySQL执行计划分析
    • DBA常用SQL和命令整理备查
    • 单表数据同步方案选型:为什么不该用 mysqldump 做「实时同步」
    • MySQL的事务隔离级别
    • MySQL存储过程批量生成数据
    • MySQL insert on duplicate key update,replace into , insert ignore的理解
    • MySQL不同字符集之间的区别和选择
    • MySQL为什么有时候会选错索引
    • MySQL死锁问题
    • MySQL使用SQL语句查重去重
    • MySQLdump逻辑备份
    • MySQL 基于 GTID 主从复制:跳过异常事务的正确姿势
    • MySQL8快速克隆插件使用指南
      • 环境准备
      • 1. 安装 clone 插件
        • 在主库执行
        • 在从库执行
      • 2. 创建用户并授权
        • 在主库执行
        • 在从库执行
      • 3. 执行克隆任务
        • 在从库执行
      • 4. 启动复制
        • 在从库执行(重启后)
      • 5. 克隆过程中的状态监控
        • 在从库执行
      • 6. 跨机房传输限速设置
        • 在主库执行
      • 7. 使用限制
      • 验证
      • 坑与边界
    • MySQL8双1设置保障安全
    • MySQL锁
    • innodb cluster安装
    • OPTIMIZE TABLE 和 ANALYZE TABLE 的区别:用实测数据说话
    • MySQLReplicaSet 安装
    • MySQL 的 Left join、Right join 和 Inner join 的区别
    • ORDER BY 配合 LIMIT 触发的索引选择陷阱
  • Redis

  • 高性能KV

  • TiDB

  • Elasticsearch

  • 数据管道

  • 其他数据库

  • 数据库
  • MySQL
灯下哥谭
2022-09-03
目录

MySQL8快速克隆插件使用指南

# 使用 MySQL 8.0 克隆插件快速搭建主从复制

MySQL 8.0 的 clone 插件提供了一种高效的方式来克隆数据实例,便于快速创建 MySQL 实例,并支持主从复制和组复制的搭建。本文将介绍如何使用 MySQL 8.0 clone 插件来快速搭建主从复制。

版本说明

本文写于 2022-09,基于 MySQL 8.0 Clone Plugin(8.0.17+ 引入)。
Clone 插件的核心用法未变,经 2026-07 复核仍适用。

# 环境准备

在开始之前,请确保您的环境符合以下要求:

  • MySQL 版本:8.0.19 或更高(MySQL 8.0.17 版本后才引入 clone 插件)
  • 主库 IP 地址:192.0.2.11
  • 从库 IP 地址:192.0.2.12

本文将通过实例操作,演示如何从主库克隆数据到从库,并在克隆完成后搭建主从复制。

# 1. 安装 clone 插件

# 在主库执行

-- 安装克隆插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- 验证插件安装
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME='clone';
1
2
3
4
5

# 在从库执行

-- 安装克隆插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- 验证插件安装
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME='clone';
1
2
3
4
5

# 2. 创建用户并授权

# 在主库执行

-- 创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'YourPassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- 创建克隆用户并授权
CREATE USER 'clone_user'@'%' IDENTIFIED BY 'YourPassword';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';
GRANT CLONE_ADMIN ON *.* TO 'clone_user'@'%';
1
2
3
4
5
6
7
8

# 在从库执行

-- 只需创建克隆用户并授权
CREATE USER 'clone_user'@'%' IDENTIFIED BY 'YourPassword';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';
GRANT CLONE_ADMIN ON *.* TO 'clone_user'@'%';
1
2
3
4

# 3. 执行克隆任务

# 在从库执行

-- 设置克隆源(主库地址)
SET GLOBAL clone_valid_donor_list = '192.0.2.11:3306';

-- 开始克隆(从主库克隆数据到从库)
CLONE INSTANCE FROM 'clone_user'@'192.0.2.11':3306 IDENTIFIED BY 'YourPassword';
1
2
3
4
5

⚠️ 这是不可逆操作:CLONE INSTANCE 会清空接收方的整个数据目录,然后用源库的数据覆盖。执行前务必确认连的是哪台机器——在生产主库上误敲一次这条命令,等于把主库数据抹掉换成别人的。执行后从库会自动重启。

克隆过程中可以随时中止:

-- 在另一个 session 里查出克隆线程的 PROCESSLIST_ID 后 KILL
SELECT PID FROM performance_schema.clone_status;
1
2

中止后数据目录处于不完整状态,必须重新克隆,不能直接启动使用。

# 4. 启动复制

# 在从库执行(重启后)

-- 查看克隆后的 Binlog 文件和位置
SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;

-- 查看 GTID 信息
SELECT @@GLOBAL.GTID_EXECUTED;

-- 配置并启动复制(新语法:START REPLICA 自 8.0.22、CHANGE REPLICATION SOURCE TO 自 8.0.23;旧的 CHANGE MASTER TO / START SLAVE 已弃用但仍兼容)
CHANGE REPLICATION SOURCE TO
    SOURCE_HOST     = '192.0.2.11',
    SOURCE_PORT     = 3306,
    SOURCE_USER     = 'repl',
    SOURCE_PASSWORD = '<password>',
    SOURCE_AUTO_POSITION = 1;

-- 启动从库复制线程
START REPLICA;

-- 查看从库状态
SHOW REPLICA STATUS\G
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 5. 克隆过程中的状态监控

# 在从库执行

-- 监控克隆状态
SELECT STATE, ERROR_NO, ERROR_MESSAGE FROM performance_schema.clone_status;

-- 监控克隆进度
SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
1
2
3
4
5

# 6. 跨机房传输限速设置

# 在主库执行

-- 限制克隆过程的网络带宽(单位:MB/s)
SET GLOBAL clone_max_network_bandwidth = 20;  -- 设置为 20MB/s,相当于 160Mbit/s
1
2

# 7. 使用限制

克隆功能的限制包括:

  • 克隆期间不允许在主库执行 DDL 操作(如 truncate table)
  • 克隆的 MySQL 实例版本必须一致
  • 每次只能克隆一个实例
  • 不支持克隆 MySQL 配置信息和 Binlog 日志
  • 仅支持克隆 InnoDB 存储引擎的数据(MyISAM / CSV 等表会被跳过,克隆完成后这些表在新实例上是空的——历史库里如果还有 MyISAM 表,这一条足以让整个克隆结果不可用)
  • 捐赠方与接收方的 MySQL 版本必须完全一致(含小版本),操作系统平台与位数必须一致
  • 两端的 innodb_page_size、innodb_data_file_path 等必须一致
  • 接收方的 clone 插件必须已安装,且磁盘剩余空间要大于源库数据总量

# 验证

1. 确认克隆本身成功:

SELECT STATE, ERROR_NO, ERROR_MESSAGE, BINLOG_FILE, BINLOG_POSITION, GTID_EXECUTED
FROM performance_schema.clone_status\G
1
2

预期输出:

          STATE: Completed
       ERROR_NO: 0
  ERROR_MESSAGE:
    BINLOG_FILE: mysql-bin.000012
BINLOG_POSITION: 1547
  GTID_EXECUTED: a47892ad-e207-11e9-bd0d-5254003519fe:1-8842
1
2
3
4
5
6

STATE 必须是 Completed。停在 In Progress 或出现 Failed 时,ERROR_MESSAGE 会写明原因(最常见的是权限不足或磁盘不够)。

2. 确认复制已建立且追上:

SHOW REPLICA STATUS\G
1

关注这三行:

        Replica_IO_Running: Yes
       Replica_SQL_Running: Yes
     Seconds_Behind_Source: 0
1
2
3

3. 确认数据真的对得上(别只看复制状态就收工):

-- 两边分别执行,比对结果
SELECT table_schema, COUNT(*) AS tables, SUM(table_rows) AS approx_rows
FROM information_schema.TABLES
WHERE table_schema NOT IN ('sys','mysql','performance_schema','information_schema')
GROUP BY table_schema;
1
2
3
4
5

table_rows 对 InnoDB 是估算值,只能做量级核对。要严格校验用 pt-table-checksum。

# 坑与边界

  • 克隆期间捐赠方(源库)不能执行 DDL,会直接失败或阻塞。给大库做克隆前先确认没有跑着的 gh-ost / 定时 DDL 任务。
  • clone_valid_donor_list 是接收方的设置,不是源库的。设错位置是最常见的报错原因(ERROR 3862: Clone Donor Error)。
  • 限速参数 clone_max_network_bandwidth 设在捐赠方,单位 MiB/s,0 表示不限速。跨机房克隆不限速会把专线打满,务必先设。
  • 克隆完成不等于可以直接接业务:新实例继承了源库的 server_id 和 server_uuid——server_uuid 会在首次启动时自动重新生成,但 server_id 来自配置文件,必须手工改成唯一值,否则复制拓扑里会出现两个相同 server_id,表现为复制反复断连。
  • 克隆得到的实例带着源库的全部账号和权限,包括源库的 root 密码。作为从库没问题,但如果是克隆去做测试环境,要记得清理生产账号。
  • 不要用克隆做备份。它是「搭一个一模一样的实例」,不是时间点备份——没有增量、不能恢复到指定时刻。备份该用 xtrabackup 或 mysqldump(见 MySQLdump逻辑备份)。
#数据迁移#高可用
上次更新: 9/8/2026

← MySQL 基于 GTID 主从复制:跳过异常事务的正确姿势 MySQL8双1设置保障安全→

最近更新
01
DeepSeek Harness 实战 05|让两个编码 Agent 共用一份长期记忆 原创
09-09
02
DeepSeek Harness 实战 04|学习笔记:从「已知限制」里读出三处设计张力 原创
09-08
03
DeepSeek Harness 实战 03|学习笔记:读 12 篇 README 拿下 dsh 的五个核心心智模型 原创
09-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式