您的位置:首页 >资讯 >

MySQL8.0 clone plugin

来源:榕城网  

 

在MySQL 8.0.17版本中引入了新的插件clone plugin。克隆插件允许克隆本地或远程MySQL服务器实例中的数据。克隆数据是存储在InnoDB中的数据的物理快照,包括模式、表、表空间和数据字典元数据。克隆的数据包括一个功能完整的数据目录,它允许使用克隆插件用于MySQL服务器配置。

clone plugin的可应用场景:

数据物理热备:(本地 or 远程)

快速构建集群从节点的复制

MGR节点的快速扩充

插件安装

首先需要安装clone plugin:(远程克隆需要在多个节点同步安装)

如果mysqld服务尚未启动,则在my.cnf中配置初始化插件加载:

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

或者在mysql运行时加载插件,则通过:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';

一.本地克隆(clone data locally)

参考文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-local.html

克隆操作需要用户具备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 ")必须不存在,但是指定的路径必须是存在的路径。MySQL服务器必须具有创建目录所需的写访问权限

案例:

mysql > CLONE LOCAL DATA DIRECTORY = '/mysql/bak'

这里指定了不存在的路径/mysql/bak,且/mysql路径具备读写权限

http://img.danews.cc/upload/images/20210331/b2064f5a57803fae4e1f8f9baa69d5b1.png

这里可以看出是原始文件的克隆,可以通过克隆数据直接拉起mysql。

二.远程克隆(clone remote data)

参考文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-remote.html

远程克隆前置条件:

克隆接收方和提供方均需要clone user,在提供方上,克隆用户需要BACKUP_ADMIN权限来访问和传输来自提供方的数据,以及在克隆操作期间阻止DDL。在接收方上,克隆用户需要CLONE_ADMIN特权来替换接收方数据、在克隆操作期间阻止DDL以及自动重新启动服务器。CLONE_ADMIN特权隐含地包括BACKUP_ADMIN和SHUTDOWN特权。

克隆操作期间不允许使用 DDL,允许并发DML

克隆接收方和提供方必须有相同的mysql server版本,且必须8.0.17+

克隆接收方和提供方必须是相同的操作系统平台。

接收方必须有足够的磁盘空间存放克隆的数据。默认情况下,在克隆提供数据之前会删除接收方数据,因此只需要足够的空间来存储克隆数据。如果使用DATA directory子句克隆到一个指定目录,则必须有足够的磁盘空间用于现有的接收方数据和克隆的数据。

InnoDB允许在数据目录之外创建一些表空间类型。如果提供的MySQL服务器实例有位于数据目录之外的表空间,克隆操作必须能够访问这些表空间

克隆接收方和提供方必须具有相同的字符集和collation字符排序规则

克隆接收方和提供方必须具有相同的innodb_page_size和innodb_data_file_path参数设置

如果克隆加密或页面压缩的数据,则提供方和接收方必须具有相同的文件系统块大小

如果要克隆加密的数据,则需要配置SSL加密安全连接

克隆接收方的clone_valid_donor_list设置必须包含提供方MySQL服务器实例的主机地址

同一时间只能有一个克隆操作

克隆插件传输1MB包和元数据。因此,在提供方和接收方MySQL服务器实例上,所需的最小max_allowed_packet值为2MB

克隆接收方也需要启动mysqld服务

远程克隆语法:

远程克隆需要在接收方创建具备clone admin权限的clone user:

mysql> GRANT CLONE_ADMIN on *.* to 'recipient_clone_user';

添加克隆提供方的ip列表与端口至clone_valid_donor_list:

SET GLOBAL clone_valid_donor_list = 'example.donor.host.com:3306';

远程克隆至指定位置:(不会影响本实例)

CLONE INSTANCE FROM 'user'@'host':portIDENTIFIED BY 'password'[DATA DIRECTORY [=] 'clone_dir'][REQUIRE [NO] SSL];

远程克隆覆盖自身:(默认方式,提供方数据直接克隆到接收方,克隆后接收方实例重启)

mysql> CLONE INSTANCE FROM 'donor_clone_user'@'example.donor.host.com':3306       IDENTIFIED BY 'password';

donor_clone_user:克隆提供方user

操作案例:

克隆提供方:

http://img.danews.cc/upload/images/20210331/d0a369609dcc1a53f352146d3c0e46dc.jpg

克隆接收方:

http://img.danews.cc/upload/images/20210331/b99d95d8f195cac5870f7feb02ae0de0.png

执行克隆操作:

http://img.danews.cc/upload/images/20210331/319157bedbb8a4d5dbb247393fe2153a.png

具体的克隆流程明细可以查看performance_schema.clone_progress:

SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;

http://img.danews.cc/upload/images/20210331/27b6b8820b935fde58542f9f0e97e9f8.jpg

PS:指定DATA DIRECTORY参数则不会开启RESTART和RECOVERY步骤。

克隆后,接收方与提供方数据一致:

http://img.danews.cc/upload/images/20210331/0885898e0d86339fc9c2d92dd60aa801.png

总结:

目前调研来看,新引入的clone plugin和xtrabackup都可以用于物理热备,不过各有优劣势,在部分场景可以考虑使用操作简易的clone替代xtrabackup,如主从复制和mgr等等。可以期待官方后续clone plugin相关的更新。后续会再研究一下clone plugin和xtrabackup的原理。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。

标签:
相关文章