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表设计和聚合函数以及正则表达式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • Mysql5.7修改root密码教程

    Mysql5.7修改root密码教程

    本文给大家分享的是个人在使用mysql5.7修改root密码的时候遇到的问题,以及解决方法,推荐给有相同需求的小伙伴参考下。
    2016-02-02
  • 如何使用mysql语句进行多表联查(以三个表为例)

    如何使用mysql语句进行多表联查(以三个表为例)

    这篇文章主要介绍了如何使用mysql语句进行多表联查(以三个表为例),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL存储过程使用实例详解

    MySQL存储过程使用实例详解

    本文介绍关于在MySQL存储过程游标使用实例,包括简单游标使用与游标循环跳出等方法
    2013-11-11
  • 基于MySQL Master Slave同步配置的操作详解

    基于MySQL Master Slave同步配置的操作详解

    本篇文章是对MySQL Master Slave 同步配置进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • linux环境下配置mysql5.6支持IPV6连接的方法

    linux环境下配置mysql5.6支持IPV6连接的方法

    本文主要介绍在linux系统下,如何配置mysql支持IPV6的连接,本文图文并茂给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2018-01-01
  • MySQL之InnoDB存储引擎中的页用法解读

    MySQL之InnoDB存储引擎中的页用法解读

    这篇文章主要介绍了MySQL之InnoDB存储引擎中的页用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • MySQL中覆盖索引和回表操作的实现

    MySQL中覆盖索引和回表操作的实现

    本文主要介绍了MySQL中覆盖索引和回表操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • 详解如何在MySQL中自动生成和更新时间戳

    详解如何在MySQL中自动生成和更新时间戳

    在数据库设计中,时间戳字段(如 create_time 和 update_time)是非常常见的需求,它们通常用于记录数据的创建时间和最后更新时间,以便于数据追踪和分析,本文将深入探讨如何在 MySQL 中设置自动生成和更新时间戳字段,需要的朋友可以参考下
    2025-02-02
  • 如何通过yum方式安装mysql数据库

    如何通过yum方式安装mysql数据库

    部署MySQL数据库有多种部署方式,常用的部署方式就有三种,yum安装、rpm安装以及编译安装,这篇文章主要给大家介绍了关于如何如果通过yum方式安装mysql数据库的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论