MySQL 8.0 克隆(clone)插件

一、克隆(clone)插件简介

MySQL 8.0 新增了一个clone插件,能够实现本地或者远程MySQL实例快速克隆。克隆的数据是InnoDB引擎的快照数据,包括数据库(schema),表(tables),表空间(tablespaces),数据字典元数据(data dictionary metadata)。克隆的数据是一个功能齐全的数据目录,使用该目录能够快速添加从节点或者组复制节点。

从远程MySQL实例克隆数据时,远程的MySQL实例称之为donor,它是数据提供者,是克隆的数据源。本地克隆数据的接收者,称之为recipient。克隆的数据通过网络,从donor传输给recipient。recipient本地的数据默认会被清除,当然也可以为recipient指定一个不同的目录用于存储克隆数据。

克隆插件除了克隆数据之外,还支持搭建复制。克隆操作能够获取复制的坐标点,在克隆完成之后,利用复制的坐标点信息,能够很方便的搭建主从复制,或者增加组复制节点。克隆插件支持表数据加密和压缩,在使用clone插件之前,需要安装插件。

二、安装克隆(clone)插件

克隆操作之前,需要在克隆的源实例(donor)和目的实例(recipient)上安装clone插件。

在my.cnf配置文件中加载clone插件:

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

也可以在MySQL实例运行时动态安装,如下:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';

查看clone插件状态:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';

如果clone插件加载失败,查看mysql错误日志,排查问题。

三、克隆本地数据

在同一台机器上,从MySQL数据目录克隆数据到另外一个目录。

语法:
CLONE LOCAL DATA DIRECTORY [=] 'clone_dir';

执行上述命令需要有BACKUP_ADMIN权限,需要先授权,如下:
GRANT BACKUP_ADMIN ON *.* TO 'clone_user';

执行本地克隆:
CLONE LOCAL DATA DIRECTORY = '/path/to/clone_dir';

/path/to/clone_dir 路径的子目录clone_dir必须不能存在,MySQL应当对其父目录有写权限,最好将其父目录的属主设置为mysql用户。

在克隆完成之后,可以在克隆的目录上,启动一个新的MySQL实例(应当设置不同端口)。

mysqld_safe --datadir=clone_dir

四、克隆远程数据

克隆插件支持远程MySQL实例克隆,通过网络将远程(donor)数据传输到本地(recipient)。

4.1 远程克隆语法

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