MySQL8.0克隆插件 (Clone Plugin)的实现

 更新时间:2025年12月17日 10:40:01   作者:gjc592  
本文主要介绍了MySQL8.0克隆插件 (Clone Plugin)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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语句动态安装,或将其配置为随服务器启动自动加载。

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配置文件中添加:

[mysqld]plugin-load-add=mysql_clone.soclone=FORCE_PLUS_PERMANENT

2.2  配置用户权限

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

本地克隆:执行克隆操作的用户需要BACKUP_ADMIN权限

GRANT BACKUP_ADMIN ON *.* TO 'clone_user';

远程克隆:捐赠者(数据源)用户需要BACKUP_ADMIN权限;接受者(目标)用户需要CLONE_ADMIN权限(该权限隐含了BACKUP_ADMIN和SHUTDOWN权限)

-- 在捐赠者上执行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) 本地克隆示例:

CLONE LOCAL DATA DIRECTORY = '/path/to/clone_dir';

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

例如:

先创建目录

mkdir -p /data/mysql/mysql3309chown -R mysql:mysql /data/mysql/mysql3309

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

执行克隆

CLONE LOCAL DATA DIRECTORY = '/data/mysql/mysql3309/data';

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

2) 远程克隆示例:

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

-- 首先,设置有效的捐赠者列表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中的相关表来监控克隆进度和状态。

-- 查看克隆进度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集群快速添加新的节点
  • 创建测试环境:可以快速克隆生产数据库到测试环境,用于测试或开发。但需注意在测试环境中对敏感数据进行脱敏处理

到此这篇关于MySQL8.0克隆插件 (Clone Plugin)的实现的文章就介绍到这了,更多相关MySQL8.0克隆插件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL之索引结构解读

    MySQL之索引结构解读

    这篇文章主要介绍了MySQL之索引结构解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • MySQL深分页问题四种方案小结

    MySQL深分页问题四种方案小结

    在数据量大时,深分页查询速度缓慢,主要原因是多次回表查询,优化方法主要介绍了四种,各方法适用于不同场景,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-11-11
  • MySQL 处理插入过程中的主键唯一键重复值的解决方法

    MySQL 处理插入过程中的主键唯一键重复值的解决方法

    本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE的相关知识,感兴趣的朋友一起学习吧
    2016-04-04
  • Windows 下 MySQL 8.X 的安装教程

    Windows 下 MySQL 8.X 的安装教程

    这篇文章主要介绍了Windows 下 MySQL 8.X 的安装教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • MySQL创建内部临时表的所有场景盘点

    MySQL创建内部临时表的所有场景盘点

    这篇文章主要为大家介绍了MySQL创建内部临时表的所有场景盘点,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 浅谈一下mysql数据库底层原理

    浅谈一下mysql数据库底层原理

    这篇文章主要介绍了浅谈一下mysql数据库底层原理,介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 禁止mysql做域名解析(解决远程访问mysql时很慢)

    禁止mysql做域名解析(解决远程访问mysql时很慢)

    当远程访问mysql时,mysql会解析域名,会导致访问速度很慢
    2010-04-04
  • 如何解决mysql insert乱码的问题

    如何解决mysql insert乱码的问题

    在本篇内容里小编给大家整理的是一篇关于如何解决mysql insert乱码的问题的相关文章,有兴趣的朋友们可以学习参考下。
    2020-08-08
  • Mysql允许他人访问本机数据库的实现步骤

    Mysql允许他人访问本机数据库的实现步骤

    mysql允许其他电脑访问,授权mysql允许其他电脑访问,本文就来介绍一下Mysql允许他人访问本机数据库的实现步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • MySQL 主键与索引的联系与区别分析

    MySQL 主键与索引的联系与区别分析

    这篇文章主要介绍MySQL 主键与索引的联系与区别,使用mysql的朋友可以看下
    2013-02-02

最新评论