文章目录

  • 简介
  • 安装插件
    • 配置文件
    • 运行时安装插件
  • 远程克隆
  • 监控
    • `performance.clone_progress`
    • `performance.clone_status`
    • Performance Schema Stage Events
    • Performance Schema Clone Instrumentation
      • Wait Instruments
      • Stage Instruments
      • Statement Instruments
      • Memory Instruments
    • `Com_clone`

简介

Clone插件可以克隆数据到本机其他目录,也可以从远端MySQL实例克隆数据到本机。克隆的数据是一个物理的快照,包含在InnoDB中存储的schema,tables,tablespaces以及数据目录元数据。Clone插件除了克隆数据外,克隆操作还可以从donor获取复制位点,并将其应用于recipient,这使得可以使用clone插件来提供组复制成员和主从复制。使用clone plugin要比正常做主从备份恢复数据快得多,效率也高得多 。

  • 本地克隆:克隆数据到MySQL服务器实例运行的同一服务器的目录。
  • 远程克隆:远程克隆中有2个角色,负责接受克隆数据的recipient(受体),负责发送数据的donor(捐助人),当recipient启动clone,donor通过网络将数据传输给recipient,这个操作会删除recipient原数据目录下的文件,并用克隆过来的数据代替它,如果需要保留原有数据,可以将数据复制到recipient的另一个目录,避免删除原有数据。

安装插件

配置文件

配置文件中加一项配置,如下:

[mysqld]
plugin-load-add=mysql_clone.so

如果clone插件很重要,clone加载失败,则MySQL也必须启动失败,可以参考如下配置

[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT

运行时安装插件

使用下面方式安装重启配置也不会丢失,因为在安装成功后配置都已经注册到 mysql.plugins系统表中。

mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';

查看是否安装成功

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUSFROM INFORMATION_SCHEMA.PLUGINSWHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone       | ACTIVE        |
+-------------+---------------+
1 row in set (0.00 sec)

plugin_status为active表示启动成功。

#本地克隆

语法如下:

CLONE LOCAL DATA DIRECTORY [=] 'clone_dir';

使用本地克隆需要有BACKUP_ADMIN权限,权限配置参考如下:

mysql> GRANT BACKUP_ADMIN ON *.* TO 'clone_user';

本地克隆示例

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

其中/path/to/clone_dir是数据被克隆到的本地目录的完整路径。指定的目录clone_dir必须不存在。

远程克隆

语法如下:

CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];
  • user:donor实例上的clone用户
  • password:user的密码
  • host:donor实例的ip/hostname地址
  • port:donor实例端口
  • DATA DIRECTORY [=] 'clone_dir':可选项,克隆数据到本地其他目录,而不是当前数据目录
  • REQUIRE [NO] SSL:是否启用ssl加密

使用远程克隆需要注意:

  • 在donor上,克隆用户需要有BACKUP_ADMIN权限,以及在克隆操作期间阻塞DDL操作。
  • 在recipient,克隆用户需要有CLONE_ADMIN权限,去替换原有的数据目录,CLONE_ADMIN权限隐式地包含BACKUP_ADMIN和SHUTDOWN权限。
  • MySQL版本必须8.0.17或更高以上
  • donor与recipient必须运行在相同的平台上,比如都是x86_64平台,而不能跨平台克隆
  • recipient磁盘空间必须足够
  • donor与recipient必须使用相同的字符集以及排序规则
  • donor与recipient必须设置相同的innodb_data_file_path(必须设置相同数量,相同大小的文件)以及innodb_page_size可以通过SHOW VARIABLES LIKE 'innodb_page_size';以及SHOW VARIABLES LIKE 'innodb_data_file_path';来确认。
  • 需要配置clone_valid_donor_list变量,donor主机必须在这个列表中,否则失败,可以通过SHOW VARIABLES LIKE 'clone_valid_donor_list';查看当前配置
  • 一次只允许一个clone操作。要确定是否存在正在运行克隆操作,请查询performance_schema.clone_status表。
  • clone插件传输的包大小为1MB,在donor与recipient中, max_allowed_packet最小设置为2MB,可以通过SHOW VARIABLES LIKE 'max_allowed_packet';
  • 在donor上undo表空间文件名必须唯一,当数据被clone到recipient,undo表空间会复制到recipient的innodb_undo_directory目录下。如果donor有多个undo在不同目录下,切名称相同,可能会发生问题。donor节点上可以通过SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE LIKE 'UNDO LOG';确定undo表空间文件名是否唯一

具体操作如下:

  1. donor上创建具有BACKUP_ADMIN权限用户

    mysql> CREATE USER 'donor_clone_user'@'%'IDENTIFIED BY 'password';
    mysql> GRANT BACKUP_ADMIN on *.* to 'donor_clone_user'@'%';
    
  2. donor上安装克隆插件

    mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
    
  3. recipient上创建CLONE_ADMIN权限用户

    mysql> CREATE USER 'recipient_clone_user'@'%'IDENTIFIED BY 'password';
    mysql> GRANT CLONE_ADMIN on *.* to'recipient_clone_user'@'%';
    
  4. recipient上安装clone插件

    mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
    
  5. recipient上添加donor主机地址到clone_valid_donor_list变量中

    mysql> SET GLOBAL clone_valid_donor_list = 'donor:3306';
    
  6. recipient上克隆远端服务器数据

    mysql> CLONE INSTANCE FROM 'donor_clone_user'@'donor':3306 IDENTIFIED BY 'password';
    

如果是从远端复制到本地的其他目录示例:

mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306IDENTIFIED BY 'password'DATA DIRECTORY = '/path/to/clone_dir';

克隆数据后,将创建以下目录和文件在MySQL内部使用:

  • #clone:包含克隆操作使用的内部克隆文件。在要复制数据的目录中创建。
  • #ib_archive:包含内部存档的日志文件,这些文件在克隆操作期间存档在捐赠者上。
  • *.#clone files:当现有数据目录被远程克隆操作替换时,在recipient上创建的临时数据文件。

监控

主要使用performance.clone_progress与``performance.clone_status`两个表进行监控

performance.clone_progress

有关当前或上次执行的克隆操作的状态信息。

mysql> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
+-----------+-----------+----------------------------+
| stage     | state     | end_time                   |
+-----------+-----------+----------------------------+
| DROP DATA | Completed | 2019-01-27 22:45:43.141261 |
| FILE COPY | Completed | 2019-01-27 22:45:44.457572 |
| PAGE COPY | Completed | 2019-01-27 22:45:44.577330 |
| REDO COPY | Completed | 2019-01-27 22:45:44.679570 |
| FILE SYNC | Completed | 2019-01-27 22:45:44.918547 |
| RESTART   | Completed | 2019-01-27 22:45:48.583565 |
| RECOVERY  | Completed | 2019-01-27 22:45:49.626595 |
+-----------+-----------+----------------------------+

performance.clone_status

有关当前或上次执行的克隆操作的进度信息。

mysql> select * from performance_schema.clone_status\G
*************************** 1. row ***************************ID: 1PID: 0STATE: CompletedBEGIN_TIME: 2020-04-05 10:26:01.852END_TIME: 2020-04-05 10:27:23.986SOURCE: 192.168.240.35:3306DESTINATION: LOCAL INSTANCEERROR_NO: 0ERROR_MESSAGE:BINLOG_FILE: binlog.000001
BINLOG_POSITION: 1516GTID_EXECUTED: 2a6a4935-7747-11ea-b104-000c2953a6ed:1-5
1 row in set (0.00 sec)

Performance Schema Stage Events

clone操作可能需要一些时间才能完成,这取决于数据量和与数据传输相关的其他因素。有三个阶段事件用于监视clone操作的进度。每个stage event报告WORK_COMPLETEDWORK_ESTIMATED值。

clone包含了以下stage events:

  • stage/innodb/clone (file copy): file copy阶段的进度。WORK_ESTIMATEDWORK_COMPLETED单元是chunk。在file copy阶段开始时就知道要传输的文件数量,并根据文件数量估计chunk的数量。WORK_ESTIMATED被设置为估计的文件块的数量。WORK_COMPLETED在每个clunk发送后更新。
  • stage/innodb/clone (page copy): page copy阶段的进度。WORK_ESTIMATEDWORK_COMPLETED单元是page。一旦完成了file copy阶段,就知道要传输的pages数量,并将WORK_ESTIMATED设置为这个值。WORK_COMPLETED在发送每个页面后更新。
  • stage/innodb/clone (redo copy): redo copy阶段的进度。WORK_ESTIMATEDWORK_COMPLETED单元是redo chunks 。一旦page copy阶段完成,就知道要传输的redo chunks的数量,并且WORK_ESTIMATED被设置为这个值,WORK_COMPLETED在每个redo chunks发送后更新。

启用stage/innodb/clone% instruments:

mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'WHERE NAME LIKE 'stage/innodb/clone%';

启用阶段事件使用者表,其中包括events_stages_currentevents_stages_historyevents_stages_history_long

mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';

查看进度

mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_currentWHERE EVENT_NAME LIKE 'stage/innodb/clone%';
+--------------------------------+----------------+----------------+
| EVENT_NAME                     | WORK_COMPLETED | WORK_ESTIMATED |
+--------------------------------+----------------+----------------+
| stage/innodb/clone (redo copy) |              1 |              1 |
+--------------------------------+----------------+----------------+

如果克隆操作已经完成,可以查看events_stages_history

mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM events_stages_historyWHERE EVENT_NAME LIKE 'stage/innodb/clone%';
+--------------------------------+----------------+----------------+
| EVENT_NAME                     | WORK_COMPLETED | WORK_ESTIMATED |
+--------------------------------+----------------+----------------+
| stage/innodb/clone (file copy) |            301 |            301 |
| stage/innodb/clone (page copy) |              0 |              0 |
| stage/innodb/clone (redo copy) |              1 |              1 |
+--------------------------------+----------------+----------------+

Performance Schema Clone Instrumentation

可以通过performance schema来对clone操作的不同维度进行监控

mysql> SELECT NAME,ENABLED FROM performance_schema.setup_instruments WHERE NAME LIKE '%clone%';
+----------------------------------------------+---------+
| NAME                                         | ENABLED |
+----------------------------------------------+---------+
| wait/synch/mutex/innodb/clone_snapshot_mutex | NO      |
| wait/synch/mutex/innodb/clone_sys_mutex      | NO      |
| wait/synch/mutex/innodb/clone_task_mutex     | NO      |
| wait/io/file/innodb/innodb_clone_file        | YES     |
| stage/innodb/clone (file copy)               | YES     |
| stage/innodb/clone (redo copy)               | YES     |
| stage/innodb/clone (page copy)               | YES     |
| statement/abstract/clone                     | YES     |
| statement/clone/local                        | YES     |
| statement/clone/client                       | YES     |
| statement/clone/server                       | YES     |
| memory/innodb/clone                          | YES     |
| memory/clone/data                            | YES     |
+----------------------------------------------+---------+

Wait Instruments

  • wait/synch/mutex/innodb/clone_snapshot_mutex: 跟踪clone snapshot mutex 的等待事件。
  • wait/synch/mutex/innodb/clone_sys_mutex: 跟踪clone sys mutex 的等待事件。
  • wait/synch/mutex/innodb/clone_task_mutex: 跟踪clone task mutex的等待事件
  • wait/io/file/innodb/innodb_clone_file: 跟踪所有文件io等待操作

Stage Instruments

  • stage/innodb/clone (file copy): file copy阶段
  • stage/innodb/clone (redo copy): redo copy 阶段
  • stage/innodb/clone (page copy): page copy阶段

Statement Instruments

  • statement/abstract/clone: 跟踪任何clone statement event,然后将其归类为本地、客户端或服务器操作类型。
  • statement/clone/local: 跟踪本地克隆操作的clone statement event;在执行克隆本地语句时生成。
  • statement/clone/client: 跟踪发生在recipient实例上的clone statement event;在recipient上执行clone语句时生成。
  • statement/clone/server: 跟踪远程clone statement event,发生在donor的MySQL服务器实例;在recipient上执行clone语句时生成。

Memory Instruments

  • memory/innodb/clone: 跟踪InnoDB为动态快照分配的内存。
  • memory/clone/data: 在clone期间跟踪clone插件分配的内存。

Com_clone

查看clone执行的次数,show status like '%clone%';

MySQL8.0Clone插件相关推荐

  1. MySQL8认证插件—LDAP Pluggable Authentication

    MySQL8认证插件-LDAP Pluggable Authentication 原创2023-05-05 19:00·贺浦力特 MySQL Enterprise Edition支持一种身份验证方法, ...

  2. MySQL8 主从复制踩坑指南

    不过那一次是基于 MySQL5.7 搭建的,最近工作需要,搭建了基于 MySQL8 的主从,和 MySQL5.7 的搭建还是有一些不同,于是稍微记录下. 准备工作 我这里有一张简单的图向大伙展示 My ...

  3. navicat 远程连接docker mysql提示:Authentication plugin ‘caching_sha2_password‘ cannot be loaded

    navicat 远程连接docker mysql提示:Authentication plugin 'caching_sha2_password' cannot be loaded 1.docker启动 ...

  4. 阅读分析程序源代码的一些方法(转载整理)

    前言 最近项目组中有较多新成员需要阅读熟悉项目中已有的程序代码,好多成员一时间对项目代码摸不清头绪,这里在网络上收集了相关源代码阅读分析的一些方法,整理于此. 正文 摘自(繁体中文Traditiona ...

  5. mysql8.0.12插件_mysql 8.0.12 安装使用教程

    记录了mysql 8.0.12 安装使用教程,供大家参考 Windows 首先从官网下载压缩包: 在安装目录解压缩: 进入压缩目录,在目录下新建my.ini,配置内容如下; [mysqld] # 设置 ...

  6. MySQL8.0新特性——默认使用caching_sha2_password作为身份验证插件

    mysql5.8开始将caching_sha2_password作为默认的身份验证插件 该caching_sha2_password和 sha256_password认证插件提供比mysql_nati ...

  7. mysql8.0.12插件_MySQL8.0.12 安装及配置

    MySQL8.0.12 安装及配置 发布时间:2018-08-07 10:39, 浏览次数:274 , 标签: MySQL 一.安装 1.从网上下载MySQL8.0.12版本,下载地址:https:/ ...

  8. mysql 8.0认证失败_解决mysql8.0因密码认证插件导致的链接不上

    简介 今天在迁移zabbix的数据库,每次链接到自己的mysql都报错, mysqlAuthentication plugin 'caching_sha2_password' cannot be lo ...

  9. MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生

    原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生 背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication) ...

最新文章

  1. Num55 boss09(activiti安装以及API)
  2. ping命令使用及其常用参数
  3. AI传教士和野人渡河问题-实验报告
  4. myeclipse8.6安装svn
  5. 重做53. Maximum Subarray
  6. Ubuntu 配置 Go 语言开发环境(Sublime Text+GoSublime)
  7. HDU1328 ZOJ1240 IBM Minus One【水题】
  8. guestfish修改镜像内容
  9. 6.5 XGBoost实战
  10. python垃圾回收机制gcgo_python垃圾处理机制
  11. java游戏走到边缘_java-3D对象相遇的边缘和毛刺不均匀
  12. 4款最受欢迎的Mac原型工具
  13. 详解Java 堆排序
  14. 服务器的mdf文件怎么打开,在没SQL Server数据库情况下怎么打开.MDF文件?
  15. 面对电车难题,自动驾驶会怎么选?
  16. vipkid(cocos creator)
  17. 使用MATLAB进行K-means聚类和层次聚类
  18. ostu阈值分割python实现_Otsu阈值OpenCV Python
  19. excel 重复方差分析_如何在Excel中运行方差方差分析的两种方法
  20. 港科报道 | 香港科技大学(广州)专题新闻发布会成功举办

热门文章

  1. Linux Ext 文件系统
  2. 电源常识-差模干扰共模干扰
  3. linux 第七天 linuxprobe
  4. python相关性分析_python实践统计学中的三大相关性系数,并绘制相关性分析的热力图...
  5. InnoDB:page_cleaner:1000ms intended loop 解决
  6. 计算机毕设之超市积分管理系统
  7. 2023年五大趋势预测 | 大数据分析、人工智能和云产业展望
  8. CharacterUtils 判断中英文,英文大小写
  9. 入职程序员从选电脑开始
  10. 订单支付页面 html,订单支付完成.html