MySQL的克隆插件是在MySQL8.0.17推出的功能,利用MySQL的克隆插件,可以将MySQL服务器实例的数据进行克隆。克隆后的数据包含存储在InnoDB中的模式、表、表空间及数据路径下的元数据。
克隆有两种方式:
使用克隆功能时,需要在作为捐献者和接收者的MySQL服务器上都必须安装克隆插件。安装克隆插件可以通过“plugin-load”或“plugin-load-add”两个启动选项加载“mysql_clone.so”,例如,
[mysqld]
plugin-load-add=mysql_clone.so
利用该启动选项可以确保在每次服务器重启时自动加载克隆插件。
也可以在MySQL服务器正在运行的时候,利用“INSTALL PLUGIN”语句安装克隆插件,例如,
mysql>INSTALL PLUGIN clone SONAME 'mysql_clone.so'
安装后的插件将注册到“mysql.plugins”系统表中,将在后续的每次服务器重启时进行加载。
用户如果需要验证插件是否成功安装,可以从“INFORMATION_SCHEMA.PLUGINS”中查询,或者使用“SHOW PLUGINS”语句查看。
用户执行本地
克隆操作时,需要具备“BACKUP_ADMIN”权限。
mysql>GRANT BACKUP_ADMIN ON *.* 'username';
执行远程克隆操作时,用户在接收服务器上需要具有“CLONE_AMDIN”权限,该权限具有置换数据、克隆期间阻挡DDL操作,及自动重启服务器的能力。在捐献服务器上需要“BACKUP_ADMIN”权限用于访问和传输数据、阻挡DDL操作。
本地克隆
本地克隆是指在同一台主机上克隆MySQL数据至其他路径,需要在运行克隆语句时,指定“LOCAL DATA DIRECTORY”选项、端口及连接信息。
mysql> CLONE LOCAL DATA DIRECTORY = '/path/to_clone_dir';
远程克隆
数据需要从一台远程MySQL服务器实例(捐献者),克隆至本地MySQL服务器实例(接收者)。需要在全局变量“clone_valid_donor_list”中配置捐献者的主机和端口。
mysql>SET GLOBAL clone_valid_donor_list = 'donor_host:3306';
之后在接收者服务器上运行“CLONE”语句:
mysql>CLONE INSTANCE FORM 'donor_user'@'donor_host:3306' IDENTIFIED BY 'password';
注意事项:
运行远程克隆时,需要满足下列条件:
捐献者和接收者必须运行相同的操作系统和平台。
接收者必须具有足够的磁盘容量。
如果捐献者的表空间文件在数据路径之外,克隆操作必须能够写入这些路径。
如果捐献者上面有激活的插件,接收者的插件也必须激活。
捐献者和接收者必须具有相同的字符串和排序。
捐献者和接收者的“innodb_page_size”和“innodb_data_file_path”的配置必须相同。
如果克隆加密或者压缩的数据,要求捐献者和接收者具有一致的文件系统块大小。
克隆加密数据时,要求使用安全连接。
“clone_valid_donor_list”中必须包含捐献者的主机地址。
克隆时,不允许其他的克隆操作。
“max_allowed_packet”值至少为2MB。
克隆插件的限制