• 技术文章 >数据库 >mysql教程

    MySQL详细解析之Clone插件

    长期闲置长期闲置2022-03-08 17:58:18转载71
    本篇文章给大家带来了关于mysql中的相关知识,其中主要介绍了clone的相关问题,MySQL 8.0.17引入了Clone插件,可以进行本地或从远程MySQL服务器实例进行克隆,希望对大家有帮助。

    推荐学习: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)查看克隆后的文件

    [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 ]

    其中,

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

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

    演示:克隆远程数据

    默认将数据克隆到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详细解析之Clone插件的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:mysql
    上一篇:浅析MySQL中的事务隔离级别,聊聊其实现原理 下一篇:一文详解MySQL中的事务和 MVCC 原理
    PHP编程就业班

    相关文章推荐

    • mysql中union的用法是什么• mysql编码怎么修改为utf8• mysql中--是啥意思• MySQL数据库基础知识点储备(整理总结)• 归纳详解MySQL知识点之表结构

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网