0

0

MySQL详细解析之Clone插件

WBOY

WBOY

发布时间:2022-03-08 17:58:18

|

2476人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于mysql中的相关知识,其中主要介绍了clone的相关问题,mysql 8.0.17引入了clone插件,可以进行本地或从远程mysql服务器实例进行克隆,希望对大家有帮助。

MySQL详细解析之Clone插件

推荐学习:mysql教程

克隆插件简介

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)查看克隆后的文件

Removal.AI
Removal.AI

AI移出图片背景工具

下载
[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视频教程

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

661

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

245

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

528

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 791人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号