MySQL 8.0的新特性-克隆插件

2019-08-12 15:38:14 浏览数 (1)

这是学习笔记的第 2064 篇文章

今天在睡觉前想起了MySQL 8.0里面的一个很好的特性,克隆插件。这篇文章介绍的很细致,可以参考。

技术分享 | 实战 MySQL 8.0.17 Clone Plugin

当然我算是比较懒的,喜欢追求性价比,即最少的时间做最多的事情。今天也算是用一个小时完整的挑战下自己,来测试一个特性。

从我冒出想法要测试这个特性,发现8.0的软件还没有安装,要整个部署下来,那个时间是很漫长的。我打开MySQL官网,开始下载软件。

结果一看网速才20多K,按照这个速度,500多M的文件需要几个小时,所以果断放弃了。但是爱偷懒的我有另外一个好方法,那就是合理利用资源优势,比如我可以使用云服务器,比如这里使用的是腾讯的服务器,如果配置了腾讯云的软件站点,那速度是杠杠的,所以我从下载到初始化完成,整个过程不到15分钟。

我们来简单说下克隆插件,这个插件从我的理解中和Oracle的热备,Data Guard的文件复制传输很类似,所以试了下这个特性都几乎没有花费太多的功夫就直接上手了。

首先直接安装插件。

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

Query OK, 0 rows affected (0.48 sec)

同时需要创建一个账户

CREATE USER clone_user@'%' IDENTIFIED by 'password';

GRANT BACKUP_ADMIN ON *.* TO 'clone_user';

使用如下的方式开始克隆,这个是本地克隆的操作方法:

/usr/local/mysql-8.0.17-linux-glibc2.12-x86_64/bin/mysql -uclone_user -ppassword --port=33081 -h127.0.0.1

> CLONE LOCAL DATA DIRECTORY = '/data/mysql_clone/clone_dir';

其中目录clone_dir是不存在的,在克隆的时候会创建。

可以通过如下的方式查看克隆的进度。

mysql> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;

----------- ------------- ----------------------------

| STAGE | STATE | END_TIME |

----------- ------------- ----------------------------

| DROP DATA | Completed | 2019-08-08 23:22:05.878982 |

| FILE COPY | Completed | 2019-08-08 23:22:06.548661 |

| PAGE COPY | Completed | 2019-08-08 23:22:06.627186 |

| REDO COPY | Completed | 2019-08-08 23:22:06.627476 |

| FILE SYNC | Completed | 2019-08-08 23:22:07.531942 |

| RESTART | Not Started | NULL |

| RECOVERY | Not Started | NULL |

----------- ------------- ----------------------------

7 rows in set (0.03 sec)

我们可以直接启动这个克隆后的实例,假设端口是33083

/usr/local/mysql-8.0.17-linux-glibc2.12-x86_64/bin/mysqld_safe --defaults-file=/data/mysql_clone/clone_dir/my.cnf &

会得到如下的列表。

mysql> show databases;

--------------------

| Database |

--------------------

| information_schema |

| mysql |

| performance_schema |

| sys |

--------------------

4 rows in set (0.00 sec)

远程克隆的效果就更明显了,不过需要配置两类账户,一个是源端,一个是目标端。

源端的配置:

CREATE USER clone_user2 IDENTIFIED by 'password1';

GRANT BACKUP_ADMIN ON *.* TO 'clone_user2'@'%';

目标端的配置:

CREATE USER clone_user2@'%' IDENTIFIED by 'password2';

GRANT CLONE_ADMIN ON *.* TO 'clone_user2'@'%';

SET GLOBAL clone_valid_donor_list = '127.0.0.1:33081';

远程克隆在目标端操作:

CLONE INSTANCE FROM clone_user2@'127.0.0.1':33081

IDENTIFIED BY 'password1';

可用通过如下的方式查看进度:

mysql> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;

----------- ----------- ----------------------------

| STAGE | STATE | END_TIME |

----------- ----------- ----------------------------

| DROP DATA | Completed | 2019-08-08 23:41:44.591132 |

| FILE COPY | Completed | 2019-08-08 23:41:45.248866 |

| PAGE COPY | Completed | 2019-08-08 23:41:45.539937 |

| REDO COPY | Completed | 2019-08-08 23:41:45.646024 |

| FILE SYNC | Completed | 2019-08-08 23:41:46.637973 |

| RESTART | Completed | 2019-08-08 23:41:51.332175 |

| RECOVERY | Completed | 2019-08-08 23:41:53.916695 |

----------- ----------- ----------------------------

7 rows in set (0.01 sec)

这个特性对于已有的xtracbackup和分布式复制是一种很好的补充,也使得热备的方式可以更加灵活便捷。

0 人点赞