首页 > 数据库 >MySQL8.0新特性--Clone Plugin克隆

MySQL8.0新特性--Clone Plugin克隆

时间:2022-12-22 09:46:10浏览次数:45  
标签:插件 克隆 Plugin -- Clone MySQL mysql COPY clone

Clone Plugin简介

8.0.17引入clone plugin,允许从本地或者远程的MySQL中克隆数据克隆的数据包括schema、表、表空间、元数据等等,克隆的数据是一个完整的数据目录,插件可以使用克隆的目录配置和恢复一个MySQL Server,克隆分为本地克隆和远程克隆。

本地克隆:将启动克隆操作的MySQL克隆到该主机的一个指定目录下。 
  

远程克隆:涉及到启动克隆操作的本地MySQL称为recipient(数据接收方),远端的源数据MySQL称为donor(捐赠者)。通过网络传输的方式将donor数据克隆到recipient的指定目录。如果不指定则会将接收方数据目录中的所有数据替换为克隆的数据。 
  

插件安装

克隆插件和其他插件一样,都位于mysql/lib/plugin下,命名为mysql_clone.so,安装方式也一样,可以通过配置文件也可以在线安装。

配置文件加载:

[mysqld]

plugin-load-add=mysql_clone.so

clone=FORCE_PLUS_PERMANENT #启动时加载插件并防止它在运行时被删除

启动时加载:

mysqld_safe --defaults-file=/etc/my.cnf --plugin-load-add=mysql_clone.so  &

在线加载:

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

检查插件是否加载成功

mysql>  SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';

+-------------+---------------+

| PLUGIN_NAME | PLUGIN_STATUS |

+-------------+---------------+

| clone       | ACTIVE        |

+-------------+---------------+

本地克隆

1、 先创建一个具有BACKUP_ADMIN备份权限的账号

mysql> create user clone@'%' identified by 'Abc-1234';

mysql> grant backup_admin on *.* to clone@'%';

2、 执行本地克隆,指定的目录MySQL必须拥有读写权限、指定的clone_dir必须不存在

mysql> clone local data directory='/dbdata/test';

Query OK, 0 rows affected (11.26 sec)

3、 查看克隆的文件

[mysql@node04 test]$ pwd

/dbdata/test

[mysql@node04 test]$ ls

#clone  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.ibd  sys  test  undo_001  undo_002

说明克隆是成功的,同时socket、pid-file、tmpdir、log-error、slow_query_log_file、log-bin、relay-log等文件是不会被克隆的。

4、 查看克隆的步骤和进度 
 

5、 利用克隆的数据目录启动一个实例

配置参数文件、准备相应的目录正常启动即可,使用show master status\G,可以查看克隆时候主库的GTID,方便搭建主从。

 

远程克隆

1、 源端创建具有BACKUP_ADMIN权限的账号(此处省略)、接收方创建具有CLONE_ADMIN权限的账号

    mysql> create user target_clone@'%' identified by 'Abc-1234';

mysql> grant clone_admin on *.* to target_clone@'%';

2、 配置源IP信息

set global clone_valid_donor_list='192.168.73.103:3307' ;

3、 开始远程克隆数据库

mysql> clone instance from clone@'192.168.73.103':3307 identified by 'Abc-1234';

Query OK, 0 rows affected (27.73 sec)

4、 查看克隆的进度与状态

TIPS:可以看出远程克隆比本地克隆多了一个RESTART和RECOVER的步骤 
 

TIPS:未指定目录的克隆,接收方实例上的数据会被覆盖。如果不想被覆盖,可以指定目录,如: 

clone instance from clone@'192.168.73.103':3307 identified by 'Abc-1234' data directioy ‘/dbdata/test’;

 

利用克隆搭建主从复制

1、 获取binlog位置或GTID

mysql> SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;

+----------------+-----------------+

| BINLOG_FILE    | BINLOG_POSITION |

+----------------+-----------------+

| bin-log.000029 |            1439 |

+----------------+-----------------+

mysql> SELECT @@GLOBAL.GTID_EXECUTED;

+-------------------------------------------------------------+

| @@GLOBAL.GTID_EXECUTED                                      |

+-------------------------------------------------------------+

| aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-5532:1001480-1001579 |

+-------------------------------------------------------------+

mysql> show master status\G;

*************************** 1. row ***************************

             File: bin-log.000002

         Position: 151

     Binlog_Do_DB:

 Binlog_Ignore_DB:

Executed_Gtid_Set: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-5532:1001480-1001579

2、 搭建复制关系(和传统搭建方式一致,省略)

 

克隆监控

1、 通过P_S库下的clone_progress、clone_status查看进度和状态(前面已提供,省略)。

2、 通过P_S库下events_stages_current、events_stages_history、events_stages_history_long。

必须打开对应的监控:

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/clone%';

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%'; 
 

停止克隆

通过performance_schema.clone_status表的PID信息,之后使用 KILL QUERY processlist_id 语句停止clone操作。

克隆相关的变量参数

       clone_valid_donor_list:设置源端IP:PORT,多个用过逗号隔开。

clone_autotune_concurrency:动态调整克隆的线程,默认ON。

clone_max_concurrency:远程克隆最大并发数据,默认16,取值范围1~128。

clone_buffer_size:本地克隆时生效。默认4M,提高该值可以提供克隆性能。

clone_ddl_timeout:默认300S,发起克隆操作前需要获取备份锁,如果此时有DDL操作,会等待clone_ddl_timeout,超过则报错。一但克隆操作在执行,DDL操作会一直阻塞。

clone_enable_compression:默认OFF,远程克隆期间牺牲CPU进行数据压缩,节省网络带宽。

clone_max_data_bandwidth:默认0(不限制),远程克隆时设置传输的最大IO速率,影响性能时,可以设置。

clone_max_network_bandwidth:默认0(不限制),远程克隆时设置最大的网络传输速率,影响性能时,可设置。

clone_ssl_ca、clone_ssl_cert、clone_ssl_key:SSL相关配置

克隆限制

1、 接收方必须先启动实例、接收方和源端都必须安装克隆插件,MySQL版本必须一致且大于8.0.17、字符集和校队规则、平台、innodb_page_size、innodb_data_file_path、SSL、秘钥机制必须相同

2、 源端登陆的账号必须具备BACKUP_ADMIN权限,接收方登陆的账号必须具备CLONE_ADMIN权限(等于BACKUP_ADMIN和SHUTDOWN),在操作期间会阻塞DDL操作。

3、 接收方的磁盘空间必须足够、指定目录的权限。

4、 INFORMATION_SCHEMA.FILES中的文件才会被CLONE,一次只运行一个克隆操作。

5、 clone插件以1MB包和元数据的形式传输数据。因此,对于recipient和donor的MySQL服务器实例,最小需要的max_allowed_packet值是2MB。max_allowed_packet值小于2MB会导致错误。

6、 克隆插件仅克隆存储的数据 InnoDB。不克隆其他存储引擎数据。MyISAM并且 CSV存储在包括sys模式的任何模式中的表都被克隆为空表。

与XtraBackup比较

XtraBackup的核心备份思想是一个线程拷贝innodb文件,一个线程拷贝redo。备份非事务引擎时,会加FTWRL全局读锁保证一致性,恢复时利用MySQL recovery的原理进行恢复。

克隆通过clone_progress可以看到有如下几个步骤:DROP DATA、FILE COPY、PAGE COPY、REDO COPY、FILE SYNC、RESTART、RECOVERY。

FILE COPY对应的是XtraBackup的idb拷贝,REDO COPY对应的是XtraBackup的redo拷贝。PAGE COPY是XtraBackup没有的,它会跟踪克隆开始这个LSN之后所有InnoDB页的改动,即跟踪每次从BP中刷新到磁盘的操作,记录对应页面的space id和page id。在FILE COPY完成后会停止PAGE跟踪,启动REDO跟踪直到完成REDO COPY,所以克隆的需要记录的REDO相比XtraBackup少很多,同时克隆的REDO COPY在记录redo的时候会判断是否会覆盖还未被拷贝走的redo日志,如果是的话,会等待Redo 完成拷贝。

总结:

克隆不支持InnoDB外的引擎,如myiasm、csv引擎的表会被克隆未单表;另外克隆只支持整个实例操作,无法克隆单个库或者单表,所以在某些场景上还无法替代XtraBackup。

       如果是整个实例的克隆与复制从库搭建,克隆操作相比XtraBackup实在是简单太多,同时MGR新增节点是通过CLONE实现的。

标签:插件,克隆,Plugin,--,Clone,MySQL,mysql,COPY,clone
From: https://www.cnblogs.com/harda/p/16997684.html

相关文章

  • c加分
    #include<stdio.h>intgcd(inta,intb){ intnum=0; intc=0; inttemp; //两个数一样的情况下,最大公约数是他本身 if(a==b) { printf("%d",a); } else......
  • ArcObjects SDK开发 019 SpatialReference
    1、SpatialReference的结构ArcObjectsSDK帮助中Esri.ArcGIS.Geometry命名空间帮助中的ObjectModelDiagram共两页,第一页就是Geometry的结构,第二页就是SpatialReference......
  • echarts柱状图渐变色并且显示数据及柱状图的宽度调整
    series:[{type:'bar',name:'起飞',barWidth:'20px',//柱状图的宽度itemStyle:{normal:{//显示渐变色......
  • POJ-2533 Longest Ordered Subsequence
    POJ-2533LongestOrderedSubsequence题意:给出一个序列,求出这个序列的最长上升子序列序列\(A\)的上升子序列\(B\)定义如下:\(B\)为\(A\)的子序列\(B\)为严......
  • Windows安全事件ID清单
    ID desc1100 事件记录服务已关闭1101 审计事件已被运输中断。1102 审核日志已清除1104 安全日志现已满1105 事件日志自动备份1108 事件日志记录服务遇到错误4608 Wi......
  • FATAL ERROR: Received unexpected end-of-file from SFTP server
    问题描述原因密码过期解决方案使用root登录,更改子用户密码,更改完之后再连接ftp......
  • 用户交互Scanner
    用户交互ScannerScanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java......
  • appium-无界面安装
    一、安装JDK本教程主要讲解安卓APP的自动化,必须要安装安卓SDK,而安卓SDK需要JDK环境。下载安装: jdk-8u121-windows-x64.exe点击这里查看JDK安装详情二、安装Android......
  • .net 6 全局路由扩展
    1、先定义一个类,用来实现IApplicationModelConvention 接口///<summary>///全局路由前缀配置///</summary>publicclassRouteConvention:IApplic......
  • github pages官方资料限制空间最大1G
    githubpages官方资料限制空间最大1G 但是目前我的空间已经突破5G也没看到有任何限制的趋势。】目前编译一次就是比较慢,大概需要50分钟了。    ......