MySQL的Clone插件怎么用

62次阅读
没有评论

共计 5105 个字符,预计需要花费 13 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 MySQL 的 Clone 插件怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

克隆插件简介

MySQL 8.0.17 引入了 Clone 插件,可以进行本地或从远程 MySQL 服务器实例进行克隆,克隆的数据是存储在 InnoDB 中的数据的物理快照,包括 schemas、tables、tablespaces 和数据字典元数据。克隆操作包括本地克隆和远程克隆。

本地克隆操作:                                                                  远程克隆操作:

安装克隆插件

使用 Clone 插件进行克隆操作,必须先进行插件的安装和配置。插件的名称是 mysql_clone.so,安装有两种方法。

方法 1:

MySQL 数据库的插件默认放在系统变量 plugin_dir 对应的目录中,在 MySQL 服务器启动时使用 –plugin-load-add 选项加载该插件即可,但该方法需每次启动服务器都需要指定对应的选项,可以将其配置到 my.cnf 文件中,即:

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

方法 2:

运行时加载该插件,使用 INSTALL PLUGIN 进行安装,并将插件注册到 mysql.plugin 系统表中:

install plugin clone soname  mysql_clone.so

安装后,可在 information_schema.plugins 表或通过 show plugins 查看。

克隆本地数据

本地克隆数据是将 MySQL 数据目录克隆相同服务器或节点到另一个目录 支持的语法如下,

CLONE LOCAL DATA DIRECTORY [=]  /path/to/clone_dir

执行上述语句,对应的用户需要有 BACKUP_ADMIN 权限,而且用户创建的文件或表空间必须在数据目录中,同时,克隆的目的地需指定绝对路径,目录完整路径必须存在,但 clone_dir 必须不存在。

演示:克隆本地数据

1)创建用户

mysql  select version();
+-----------+
| version() |
+-----------+
| 8.0.25 |
+-----------+
1 row in set (0.00 sec)
mysql  create user clone_admin identified by  Cl0neTest 
Query OK, 0 rows affected (0.02 sec)
mysql  grant backup_admin on *.* to clone_admin;
Query OK, 0 rows affected (0.10 sec)

2)创建目录

[root@node1 ~]# mkdir /mysql/clone/
[root@node1 ~]# chown -R mysql:mysql /mysql/clone/

3)克隆操作

mysql  clone local data directory= /mysql/clone/clone_data 
Query OK, 0 rows affected (17.09 sec)

4)查看克隆后的文件

[root@node1 ~]# ll /mysql/clone/clone_data/
total 6348816
drwxr-x---. 2 mysql mysql 89 Nov 28 11:26 #clone
-rw-r-----. 1 mysql mysql 9231 Nov 28 11:26 ib_buffer_pool
-rw-r-----. 1 mysql mysql 4294967296 Nov 28 11:26 ibdata1
-rw-r-----. 1 mysql mysql 1073741824 Nov 28 11:26 ib_logfile0
-rw-r-----. 1 mysql mysql 1073741824 Nov 28 11:26 ib_logfile1
drwxr-x---. 2 mysql mysql 6 Nov 28 11:26 mysql
-rw-r-----. 1 mysql mysql 25165824 Nov 28 11:26 mysql.ibd
drwxr-x---. 2 mysql mysql 4096 Nov 28 11:26 sakila
drwxr-x---. 2 mysql mysql 28 Nov 28 11:26 sys
-rw-r-----. 1 mysql mysql 16777216 Nov 28 11:26 undo_001
-rw-r-----. 1 mysql mysql 16777216 Nov 28 11:26 undo_002

5)验证,使用克隆的目录启动数据库

[root@node1 ~]# service mysql.server stop
Shutting down MySQL.... SUCCESS!
[root@node1 ~]# mysqld_safe --datadir=/mysql/clone/clone_data/ --lower-case-table-names=1 --user=mysql
2021-11-28T03:47:11.012900Z mysqld_safe Logging to  /mysql/clone/clone_data/node1.com.cn.err .
2021-11-28T03:47:11.036181Z mysqld_safe Starting mysqld daemon with databases from /mysql/clone/clone_data

克隆远程数据

克隆远程 MySQL 服务器实例(donor)并将其传输至执行克隆操作的 MySQL 实例(recipient),支持的克隆远程数据的语法如下:

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

其中,

user 是 donor MySQL 服务器实例的用户名;

password 是 user 的密码;

host 是 donor MySQL 服务器实例的 hostname 地址,目前支持 IPv4,不支持 IPv6,但可使用别名;

port 是 donor MySQL 服务器实例的端口号;

DATA DIRECTORY [=] clone_dir 是可选的子句用于指定接收克隆数据的目录,不指定该选项会覆盖已存在的数据文件,指定该选项可将克隆数据传输至该目录;

REQUIRE [NO] SSL 显式指定是否使用加密连接;

执行克隆操作,克隆插件必须在 donor 和 recipient MySQL 服务器实例激活,在 donor 服务器实例,克隆用户需要 BACKUP_ADMIN 权限,在 recipient 服务器实例,克隆用户需要 CLONE_ADMIN 权限,CLONE_ADMIN 权限包括 BACKUP_ADMIN 和 SHUTDOWN 权限。

执行 CLONE INSTANCE 语句需满足下面的先决条件:

donor 和 recipient 必须有相同的 MySQL 服务器版本,克隆插件在 8.0.17 版本后支持;

donor 和 recipient 必须运行在相同的操作系统和平台;

克隆数据,recipient 必须有足够的磁盘空间;

InnoDB 需要在数据目录外面创建表空间,可通过 INFORMATION_SCHEMA.FILES 查看;

克隆插件必须在 donor 和 recipient 激活,可通过 SHOW PLUGINS 查看;

donor 和 recipient 必须有相同的 MySQL 服务器字符集和排序规则;

donor 和 recipient 需要有相同的 innodb_page_size 和 innodb_data_file_path 设置;

若克隆加密或页压缩的数据,donor 和 recipient 必须有相同的文件系统块大小;

若克隆加密的数据,需要安全的连接;

recipient 上的 clone_valid_donor_list 设置必须包括 donor MySQL 服务器实例的主机地址;

一次只能有一个克隆操作,克隆期间不能有其他克隆操作,可通过 clone_status 查看;

克隆插件以 1MB 数据包和元数据的形式传输数据,在 donor 和 recipient MySQL 服务器实例上所需的最小 max_allowed_packet 是 2MB;

donor 上的 Undo 表空间文件名必须唯一,当数据克隆到 recipient,undo 表空间克隆到 recipient 上 innodb_undo_directory 指定的位置或 DATA DIRECTORY [=] clone_dir 子句指定的目录;

默认,recipient MySQL 服务器实例在克隆数据完成后自动重启;

几个变量控制远程克隆操作的各个方面;

演示:克隆远程数据

默认将数据克隆到 recipient 端的数据目录,并使用 donor 的数据进行覆盖,然后进行自动重启 recipient 端的 MySQL 服务器实例

1)登录到 donor MySQL 服务器实例,创建用户并安装插件(若安装可忽略)

mysql  create user  donor_clone_user  identified by  donor_clone_user 
Query OK, 0 rows affected (0.02 sec)
mysql  grant backup_admin on *.* to donor_clone_user;
Query OK, 0 rows affected (0.01 sec)

2)登录到 recipient MySQL 服务器实例,创建账户并安装插件,并设置 clone_valid_donor_list

mysql  create user recipient_clone_user identified by  recipient_clone_user 
Query OK, 0 rows affected (0.04 sec)
mysql  grant clone_admin,backup_admin on *.* to recipient_clone_user;
Query OK, 0 rows affected (0.01 sec)
mysql  install plugin clone soname  mysql_clone.so
Query OK, 0 rows affected (0.01 sec)
mysql  set global clone_valid_donor_list= 192.168.56.53:3306 
Query OK, 0 rows affected (0.00 sec)

3)登录到 recipient MySQL 服务器实例,使用 recipient_clone_user 用户或 root 用户执行克隆操作,操作完成后会自动重启

mysql  clone instance from  donor_clone_user @ 192.168.56.81 :3306 identified by  donor_clone_user 
Query OK, 0 rows affected (51.08 sec)

注:将 donor 的数据克隆到 recipient 端默认会覆盖其数据文件,也可以指定一个目录进行克隆,如下:

mysql  clone instance from  donor_clone_user @ 192.168.56.81 :3306 identified by  donor_clone_user  data directory= /mysql/clone/clone_data 
Query OK, 0 rows affected (51.17 sec)

使用新目录启动 MySQL 服务器实例:

[root@node2 clone]# mysqld --lower-case-table-names=1 --datadir=/mysql/clone/clone_data/ --user=mysql 

以上就是“MySQL 的 Clone 插件怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计5105字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)