MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇)

这篇具有很好参考价值的文章主要介绍了MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    在上一篇文章中,我们深入探讨了Clone技术的多种用途,以及使用它所需满足的前提条件。我们也详细分析了Clone存在的限制,并深入了解了其背后的备份原理。今天,我们将继续探索MySQL Clone Plugin的强大功能,Clone其实最重要的就是克隆数据了,包括本地克隆数据和远程克隆数据两种方式,本地克隆数据作为Clone介绍的第二篇,今天我们将重点介绍如何通过clone进行本地克隆数据。我将详细介绍本地克隆的步骤、注意事项以及可能出现的问题和解决方案。通过实际操作,我们将更深入地理解Clone在数据库管理中的重要性,并体验其带来的便利性。

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

官方文档对本地克隆数据的详细介绍:

MySQL :: MySQL 8.0 Reference Manual :: 5.6.7.2 Cloning Data Locally


本地克隆数据的用途:

1、备份实例到本地

2、对数据目录进行迁移(本地克隆进行迁移一般情况下是为了当前目录没有规划好大小并且不是逻辑卷而进行的同机迁移,今天主要介绍这种)

本地克隆数据语法:

   本地克隆操作从MySQL服务器实例中克隆数据,其中克隆操作启动到MySQL服务器实例运行的同一服务器或节点上的目录。

语法:

CLONE LOCAL DATA DIRECTORY [=] 'clone_dir';    ---用户需要有BACKUP_ADMIN权限

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

如何停止本地克隆:

SQL> select * from performance_schema.clone_status\G;       ---克隆操作的状态

PIDProcesslist ID。对应show processlist中的Id,如果要终止当前的克隆操作,执行kill processlist_id命令即可。

SQL> Kill+id号;

本地克隆相关视图:

SQL> select * from performance_schema.clone_status\G;       ---克隆操作的状态

PIDProcesslist ID。对应show processlist中的Id,如果要终止当前的克隆操作,执行kill processlist_id命令即可。

STATE克隆操作的状态,Not Started(克隆尚未开始),In Progress(克隆中),Completed(克隆成功),Failed(克隆失败)。如果是Failed状态,ERROR_NO,ERROR_MESSAGE会给出具体的错误编码和错误信息。

BEGIN_TIME克隆操作开始

END_TIME:克隆结束时间。

SOURCE:Donor(源库)实例的地址。

DESTINATION克隆目录。“LOCAL INSTANCE”代表当前实例的数据目录。

BINLOG_FILE克隆完成后的file号

BINLOG_POSITIONfile的pos点

GTID_EXECUTED克隆的gtid点,可利用这些信息来搭建从库。

SQL> select

   stage,

   state,

   cast(begin_time as DATETIME) as "START TIME",

   cast(end_time as DATETIME) as "FINISH TIME",

   lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10, ' ') as DURATION,

   lpad(concat(format(round(estimate/1024/1024,0), 0), "MB"), 16, ' ') as "Estimate",

   case when begin_time is NULL then LPAD('%0', 7, ' ')

   when estimate > 0 then

   lpad(concat(round(data*100/estimate, 0), "%"), 7, ' ')

   when end_time is NULL then lpad('0%', 7, ' ')

   else lpad('100%', 7, ' ')

   end as "Done(%)"

   from performance_schema.clone_progress;

STAGE:一个克隆操作可依次细分为DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,RESTART,RECOVERY等7个阶段。当前阶段结束了才会开始下一个阶段。本地克隆只涉及到前五个阶段完成DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,远程克隆涉及到七个阶段

STATE:当前阶段的状态。有三种状态:Not Started,In Progress,Completed。

BEGIN_TIME:当前阶段的开始时间和结束时间。

END_TIME:当前阶段的开始时间和结束时间。

THREADS:当前阶段使用的并发线程数。并发线程数一般由clone_autotune_concurrency参数自动调节默认为ON此时该参数最大线程数受clone_max_concurrency参数控制。若设置为OFF则并发线程数的数量将是固定的clone_max_concurrency参数保持一致。clone_max_concurrency参数的默认值为16。

ESTIMATE:预估的数据量。

DATA:已经拷贝的数据量。

NETWORK:通过网络传输的数据量。如果是本地克隆,该列的值为0。

DATA_SPEED:当前数据拷贝的速率。注意,是当前值。

NETWORK_SPEED:当前网络传输的速率。注意,是当前值。

案例开始(通过本地克隆对数据目录进行迁移):

(1)首先先安装Clone(数据克隆)插件(插件安装):

mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';    ---这种是手动在线安装插件,不需要重启,并且重启后也不会失效。

(2)查看插件状态是否active:

mysql> show plugins;

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

(3)在实例上创建克隆用户:

mysql> create user 'donor_clone_user'@'%' identified by '123456';
mysql> grant backup_admin on *.* to 'donor_clone_user'@'%';

(4)创建clone目录(也就是迁移的目录)

[root@mysql8 ~]# mkdir /clone_dir
[root@mysql8 ~]# chown -R mysql:mysql /clone_dir

(5)了解本地克隆数据对DDL的影响 

DML:不影响

mysql> insert into itpux values (23);

Query OK, 1 row affected (0.81 sec)

DDL:长期不返回,需要等到克隆完成(不过可以通过设置clone_ddl_timeout参数在克隆期间允许DDL不过会导致克隆失败,在8.0.27版本新增clone_block_ddl参数在克隆期间允许DDL同时不会导致克隆失败)

mysql> create table itdwd (id int);

                  无响应

(6)设置克隆期间允许DDL为了在克隆期间允许DDL,设置clone_ddl_timeout参数为0,虽然会导致克隆失败但要保证DDL不受影响。8.0.27版本新增clone_block_ddl参数在克隆期间允许DDL同时不会导致克隆失败。这个设置可选

mysql> set global clone_ddl_timeout=0;    ---设置为0意味着克隆操作不会等待备份锁。在这种情况下执行并发DDL操作可能导致克隆操作失败,设置为其他数值发现还是需要等到克隆完成,只有设置为0。

 (7)Clone(数据克隆)发起克隆命令

[root@slave ~]# mysql -udonor_clone_user -p123456 -S /var/lib/mysql/mysql.sock

mysql> clone local data directory='/clone_dir/3306'; 

其中/clone_dir/3306是克隆目录,其需满足以下几点要求:

  1、克隆目录必须是绝对路径。

  2、/clone_dir必须存在且MySQL对其有可写权限。

  3、3306不能存在。

注:本地克隆只涉及到五个阶段完成DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,远程克隆涉及到七个阶段,也是就说本地克隆完成不会重启数据库(RESTART)和数据一致性效验(RECOVERY)

(8)查看克隆操作

mysql> select * from performance_schema.clone_status\G;       ---克隆操作的状态

mysql> select

   stage,

   state,

   cast(begin_time as DATETIME) as "START TIME",

   cast(end_time as DATETIME) as "FINISH TIME",

   lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10, ' ') as DURATION,

   lpad(concat(format(round(estimate/1024/1024,0), 0), "MB"), 16, ' ') as "Estimate",

   case when begin_time is NULL then LPAD('%0', 7, ' ')

   when estimate > 0 then

   lpad(concat(round(data*100/estimate, 0), "%"), 7, ' ')

   when end_time is NULL then lpad('0%', 7, ' ')

   else lpad('100%', 7, ' ')

   end as "Done(%)"

   from performance_schema.clone_progress;     ---克隆的进度信息。本地克隆只涉及到五个阶段完成DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,远程克隆涉及到七个阶段,也是就说本地克隆完成不会重启数据库(RESTART)和数据一致性效验(RECOVERY)

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

(9)查看当前数据库的数据文件路径并关闭实例

mysql> show variables like '%datadir%';

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

[root@mgr1 3306]# service mysqld stop

 (10)修改数据文件路径参数指向新的逻辑卷目录

[root@mgr1 3306]# vi /mysql/data/3306/my.cnf

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

(11)如果是通过linux服务启动(service)还需要修改服务启动脚本

[root@mgr1 3306]# vi /etc/init.d/mysqld

修改一:目录和数据存储目录

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

修改二:相关目录和数据存储目录

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

修改三:不用修改,调用的变量

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

 (12)启动实例,验证相关目录

[root@mgr1 3306]# service mysqld start

mysql> show variables like '%datadir%';

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇),mysql,数据库,运维

验证:

mysql> show databases;

mysql> select table_name from information_schema.tables;

mysql> select * from ded.itpuxbak11;  

mysql> select * from itpuxdb.emp; 

mysql> select * from itpuxdb.yg;  ---能查询到数据,表示数据恢复的没问题。可能存在表不能查询的情况,那么就是数据字典没有记录表的问题,需要多验证几张文章来源地址https://www.toymoban.com/news/detail-783991.html

到了这里,关于MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中的深克隆和浅克隆(Clone)

    浅克隆(shallow clone)和深克隆(deep clone)是两种不同的对象复制方法。 浅克隆会创建一个新对象,然后将原始对象的所有字段复制到新对象中。如果字段是基本类型,则它们的值将被直接复制。如果字段是引用类型,则只会复制引用,而不会复制引用指向的对象。这意味着

    2024年02月16日
    浏览(41)
  • 基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

    Hive介绍: Hive是建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的语言(HQL),可以对大规模数据集进行查询和分析。通过Hive,我们可以在分布式存储系统中进行复杂的数据处理和分析。 Sqoop简介: Sqoop是一个用于在Apache Hadoop和关系型数据库之间传输数据的工具。

    2024年04月13日
    浏览(43)
  • PHP&MySQL基础(一):创建数据库并通过PHP进行连接

    PHP同样可以对数据库进行连接,并且实现增删改查、登录注册等功能,这一篇写一下怎么使用PHP去连接MySQL数据库 目录 一、创建数据库 1.1 登录页面 1.2 创建数据库 1.3 创建数据库表 1.4 添加表字段 1.5 插入数据 1.6 导出和导入 二、PHP连接数据库 2.1 通过 mysqli() 进行实例化 2.

    2024年02月03日
    浏览(59)
  • 群晖GitLab修改clone(克隆)地址

            通过群晖的Docker(ContainerManager)配置好GitLab后,每次clone代码总要修改前面的地址,因此作者找到了修改的办法,实属不易,请给个关注!         给出我的群晖配置gitlab的设置,如图1。    图1 Docker中GitLab的配置          按照我的配置,可以在/volume1/docker/gitl

    2024年02月12日
    浏览(39)
  • 通过HTML网页对mysql数据库进行增删改查(CRUD实例)

    首先我们得了解一下大致的架构 ,如下: 我们采用自底向上的方式进行开发, 一、先写mysql数据库 二、再写java后端(Spring MVC架构)(这个是什么东西不懂不要紧,跟着步骤做就行了) 三、最后写前端页面(HTML) 一、 Mysql数据库部分 我们要通过网页对数据库进行开发,那么我们需要先准

    2024年02月02日
    浏览(39)
  • gitlab设置/修改克隆clone地址端口

    最近由于公司要停测试库云服务器? 什么?要停测试库服务器??? 是的! 你没听错。 真是醉了,多大的集团,为了省钱,也真是拼了, 作为开发人员,没有测试服务器,犹如断臂之人。 所以,在之前搭建环境的时候都没有写文档,今天算是弥补上,以后都可以作为参考

    2024年01月23日
    浏览(32)
  • 【Unity】预制体材质变(Clone)克隆体问题

    1、排查代码是否存在直接修改预制体的材质为克隆体。         解决:删了这段代码。 2、双击Prefab文件进入预制体编辑模式时,会执行预制体身上的脚本方法Awake、Start等(生命周期方法),所以要排查这些方法里是否有克隆材质行为。         解决:             

    2024年02月10日
    浏览(54)
  • GitHub下载克隆clone指定的分支tags代码

    github上有很多tag分支版本的代码,我想克隆下载指定版本到我服务器上面 例如:我想下载tag:v2.0.2的代码 命令: git clone -b [tags标签] [git地址] 例如:git clone -b v2.0.2 https://github.com/spring-projects/spring-retry.git 若想对克隆后的项目重命名则可执行以下命令 git clone -b [tags标签] [git地

    2024年02月06日
    浏览(54)
  • WSL2 git clone命令无法克隆远程仓库

    最近在往WSL2里拉取git仓库的时候,突然出现了这个问题,WSL2无法连接到git服务器,导致代码无法拉取下来,可能是因为我最近不小心修改了windows的防火墙设置,导致出现了这个问题。 在查阅了很多篇博客以后,终于找到一篇博客可以解决我这个问题,下面记录一下详细过程

    2024年01月18日
    浏览(40)
  • 开发工具篇第二十六讲:使用IDEA进行本地调试和远程调试

    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化;并且在实际的排错过程中,还会用到Remote Debug。 本文是开发工具篇第二十六讲,主要介绍基于IDEA的Debug和Remote Debug的技巧。

    2024年02月16日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包