首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL 8.0克隆插件 (Clone Plugin)

MySQL 8.0克隆插件 (Clone Plugin)

作者头像
俊才
发布2025-12-17 13:57:51
发布2025-12-17 13:57:51
2180
举报
文章被收录于专栏:数据库干货铺数据库干货铺

MySQL 8.0 的克隆插件 (Clone Plugin) 是一项从 MySQL 8.0.17 版本开始引入的强大功能,它允许你便捷地创建本地或远程MySQL实例数据的物理快照。本文将详细介绍其用途、使用方法、限制以及应用场景。

1. 克隆插件简介

克隆插件用于创建MySQL实例的物理快照。这个快照包含了存储在InnoDB中的完整数据目录,如表、表空间、数据字典元数据等,使得克隆后的数据立即可用。它主要支持两种模式:

  • 本地克隆:将数据从本地MySQL实例克隆到同一台服务器上的指定目录。
  • 远程克隆:从远程MySQL实例(捐赠者)克隆数据到发起操作的本地实例(接受者)。接受者上的现有数据默认会被覆盖,但也可以选择克隆到其他目录以避免数据丢失。

两者的对比如下:

特性

本地克隆

远程克隆

数据源

本地MySQL实例

远程MySQL实例 (捐赠者)

目标位置

同一服务器上的指定目录

接受者实例的数据目录或指定目录

主要权限

BACKUP_ADMIN

捐赠者需BACKUP_ADMIN,接受者需CLONE_ADMIN

网络要求

捐赠者与接受者之间网络可达

2. 如何使用克隆插件

2.1 安装插件

首先,需要在MySQL实例上安装克隆插件。你可以通过SQL语句动态安装,或将其配置为随服务器启动自动加载。

代码语言:javascript
复制
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
Empty set (0.19 sec)
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
Query OK, 0 rows affected (0.14 sec)
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone       | ACTIVE        |
+-------------+---------------+
1 row in set (0.01 sec)

若希望插件永久生效,可在my.cnf配置文件中添加:

代码语言:javascript
复制
[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT

2.2 配置用户权限

执行克隆操作需要特定的权限,本地复制和远程复制权限不同:

  • 本地克隆:执行克隆操作的用户需要BACKUP_ADMIN权限
代码语言:javascript
复制
GRANT BACKUP_ADMIN ON *.* TO 'clone_user';
  • 远程克隆:捐赠者(数据源)用户需要BACKUP_ADMIN权限;接受者(目标)用户需要CLONE_ADMIN权限(该权限隐含了BACKUP_ADMIN和SHUTDOWN权限)
代码语言:javascript
复制
-- 在捐赠者上执行
CREATE USER 'donor_user'@'%' IDENTIFIED BY 'password';
GRANT BACKUP_ADMIN ON *.* TO 'donor_user'@'%';
-- 在接受者上执行
CREATE USER 'recipient_user'@'%' IDENTIFIED BY 'password';
GRANT CLONE_ADMIN ON *.* TO 'recipient_user'@'%';

2.3 执行克隆操作

1) 本地克隆示例:

代码语言:javascript
复制
CLONE LOCAL DATA DIRECTORY = '/path/to/clone_dir'; 

/path/to/clone_dir必须是绝对路径,且该目录不能已存在,但其父目录必须存在。

例如:

先创建目录

代码语言:javascript
复制
mkdir -p /data/mysql/mysql3309
chown -R mysql:mysql /data/mysql/mysql3309

/data/mysql/mysql3309/data必须是绝对路径,且该目录不能已存在,但其父目录(/data/mysql/mysql3309)必须存在。

执行克隆

代码语言:javascript
复制
CLONE LOCAL DATA DIRECTORY = '/data/mysql/mysql3309/data'; 

克隆完毕后可见已经生成数据目录

2) 远程克隆示例:

在接受者实例上执行以下命令:

代码语言:javascript
复制
-- 首先,设置有效的捐赠者列表
SET GLOBAL clone_valid_donor_list = 'donor_host_ip:3306';
-- 然后,执行远程克隆
CLONE INSTANCE FROM 'donor_user'@'donor_host_ip':3306 IDENTIFIED BY 'password';

远程克隆操作完成后,接受者MySQL实例通常会自动重启。

2.4 监控克隆操作

如果库比较大,可以通过查询performance_schema中的相关表来监控克隆进度和状态。

代码语言:javascript
复制
-- 查看克隆进度
SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
-- 查看克隆最终状态
SELECT * FROM performance_schema.clone_status;

3. 注意事项

使用克隆插件时,需要注意以下限制:

  • 版本一致性:捐赠者和接受者必须运行完全相同的MySQL服务器版本(8.0.17及以上),且最好位于相同的操作系统平台
  • 并发DDL限制:克隆操作期间,不允许在捐赠者或接受者实例上执行DDL语句(如ALTER TABLE),但允许DML操作(如INSERT, UPDATE, DELETE)
  • 存储引擎:克隆插件仅克隆InnoDB表的数据。其他存储引擎(如MyISAM)的表不会被克隆
  • 二进制日志与配置文件:克隆操作不会克隆二进制日志(binlog),也不会克隆MySQL的配置文件(如my.cnf)
  • 空间与连接:确保接受者有足够的磁盘空间存放克隆数据。同时,捐赠者和接受者实例的max_allowed_packet参数应设置为至少2MB
  • 一次性操作:同一时间一个MySQL实例上只能进行一个克隆操作

4. 总结

MySQL 8.0的克隆插件是一个功能强大且高效的数据库克隆工具,主要应用场景:

  • 快速数据库备份:克隆插件提供了一种高效的物理备份方式,尤其适用于大型数据库
  • 快速搭建主从复制:通过远程克隆,可以迅速创建一个与主库数据完全一致的从库,并自动获取主库的复制坐标(如GTID),极大简化了主从环境的搭建流程
  • 快速扩展MGR节点:为MySQL Group Replication集群快速添加新的节点
  • 创建测试环境:可以快速克隆生产数据库到测试环境,用于测试或开发。但需注意在测试环境中对敏感数据进行脱敏处理

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档