原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生
背景
很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮。前者加入了组复制(Group Replication)功能,后者加入了克隆插件(Clone Plugin)功能。今天我们实战测试一下这个新功能。
克隆插件简介
克隆插件允许在本地或从远程 MySQL 实例克隆数据。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许使用克隆插件进行 MySQL 服务器配置。
克隆插件支持两种克隆方式
本地克隆
远程克隆
本地克隆
本地克隆操作将启动克隆操作的 MySQL 服务器实例中的数据克隆到同服务器或同节点上的一个目录里
远程克隆
默认情况下,远程克隆操作会删除接受者(recipient)数据目录中的数据,并将其替换为捐赠者(donor)的克隆数据。(可选)您也可以将数据克隆到接受者的其他目录,以避免删除现有数据。
远程克隆操作和本地克隆操作克隆的数据没有区别,数据是相同的。
克隆插件支持复制。除克隆数据外,克隆操作还从捐赠者中提取并传输复制位置信息,并将其应用于接受者,从而可以使用克隆插件来配置组复制或主从复制。使用克隆插件进行配置比复制大量事务要快得多,效率更高。
实战部分
一、本地克隆
安装克隆插件
启动前
[mysqld]plugin-load-add=mysql_clone.so
或运行中
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
|第二种方法会注册到元数据,所以不用担心重启插件会失效。两种方法都很好用
检查插件有没有启用
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'clone';+-------------+---------------+| PLUGIN_NAME | PLUGIN_STATUS |+-------------+---------------+| clone | ACTIVE |+-------------+---------------+1 row in set (0.01 sec)
设置强制启动失败参数
[mysqld]plugin-load-add=mysql_clone.soclone=FORCE_PLUS_PERMANENT
|如果克隆插件对你们很重要,可以设置clone=FORCE_PLUS_PERMANENT或clone=FORCE。作用是:如果插件未成功初始化,就会强制mysqld启动失败。
克隆需要的权限
需要有备份锁的权限。备份锁是 MySQL 8.0 的新特性之一,比5.7版本的flush table with read lock要轻量。
mysql> CREATE USER clone_user@'%' IDENTIFIED by 'password';mysql> GRANT BACKUP_ADMIN ON *.* TO 'clone_user'; # BACKUP_ADMIN是MySQL8.0 才有的备份锁的权限
执行本地克隆
mysql -uclone_user -ppassword -S /tmp/mysql3008.sockmysql> CLONE LOCAL DATA DIRECTORY = '/fander/clone_dir';
|例子中需要 MySQL 的运行用户拥有 fander