详解MySQL如何避免克隆失败后再次初始化

 更新时间:2023年10月24日 08:45:44   作者:爱可生开源社区  
本文章讨论了当您没有足够的磁盘空间来存储两个数据集时,使用带有安全选项DATA DIRECTORY 的 CLONE INSTANCE 命令,所以接下来小编给大家详细的介绍一下,MySQL如何避免克隆失败后再次初始化,需要的朋友可以参考下

MySQL 克隆插件简化了新副本的配置,但不会简化失败后的服务器恢复,除非您准备从头开始重新安装 MySQL 实例。

但是,当您克隆一个已经有巨大数据集的复制副本时,您可能没有足够的空间容纳两个数据集:一个来自源服务器,另一个来自复制副本上的数据。

由于您决定从另一台服务器克隆复制副本,因此您同意丢失当前数据。DATA DIRECTORY 选项的唯一需要是在出现故障时保持与克隆相关的权限和设置不变。您可以使用以下策略之一安全地执行克隆操作。

从头开始

要执行此操作,请停止当前服务器,删除数据目录,再次初始化它,进行连接,并设置与克隆相关的权限和选项。这样,您将拥有一个带有小数据目录的新实例,因此您可以使用选项 DATA DIRECTORY ,而不用担心超出可用磁盘空间。

保留现有 MySQL 架构

如果不想重新安装实例,可以从中删除用户数据。

  • 列出所有带查询的非系统数据库。
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA 
WHERE SCHEMA_NAME NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema');
  • 将它们逐一移除。您可以使用以下存储过程来执行此操作。
CREATE PROCEDURE p1()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE dbname VARCHAR(64);
  DECLARE c1 CURSOR FOR SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema', 'test');
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN c1;

  drop_loop: LOOP
    FETCH c1 INTO dbname;
    IF done THEN
      LEAVE drop_loop;
    END IF;
    SET @temp = CONCAT('DROP DATABASE ', dbname);
    PREPARE stmt FROM @temp;
    EXECUTE stmt;
  END LOOP;

  CLOSE c1;
END

如果您将 InnoDB 数据存储在共享表空间中(InnoDB_file_per_table=0),则文件 ibdata 将不会收缩,并且您将无法以这种方式释放磁盘空间。

克隆实例

手动删除数据释放磁盘空间后,可以使用带有选项 DATA DIRECTORYCLONE INSTANCE 命令。

CLONE INSTANCE FROM ‘clone_user'@'source_host':3306 \
IDENTIFIED BY 'password' DATA DIRECTORY = '/path/to/custom_dir';

如果克隆成功,您需要通过一个额外的步骤来完成它:停止 MySQL 实例,并将数据目录的内容替换为用于克隆操作的目录的内容。之后,启动服务器。

如果克隆操作失败,请删除克隆的数据,修复错误,然后重试。

结论

克隆操作可能会失败,并迫使您通过重新初始化副本上的 MySQL 实例来执行额外的步骤。要避免这种情况,请使用选项 DATA DIRECTORY。如果磁盘空间不足,无法存储两个数据副本,请在克隆之前清理现有数据。

以上就是详解MySQL如何避免克隆失败后再次初始化的详细内容,更多关于MySQL避免克隆失败后初始化的资料请关注脚本之家其它相关文章!

相关文章

  • 解决mysql ERROR 1017:Can''t find file: ''/xxx.frm'' 错误

    解决mysql ERROR 1017:Can''t find file: ''/xxx.frm'' 错误

    如果重启服务器前没有关闭mysql,MySql的MyiSAM表很有可能会出现 ERROR #1017 :Can't find file: '/xxx.frm' 的错误
    2011-08-08
  • Mysql sql慢查询监控脚本代码实例

    Mysql sql慢查询监控脚本代码实例

    这篇文章主要介绍了Mysql sql慢查询监控脚本代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Mysql中高效JOIN操作之多表关联查询实战指南

    Mysql中高效JOIN操作之多表关联查询实战指南

    在现代软件开发中,数据库几乎无处不在,而多表关联查询(JOIN)则是我们与数据库交互的核心操作之一,本文将从JOIN的基础知识讲起,逐步深入到优化技巧和实战案例,希望对大家有所帮助
    2025-08-08
  • MySQL窗口函数 over(partition by)的用法

    MySQL窗口函数 over(partition by)的用法

    本文主要介绍了MySQL窗口函数 over(partition by)的用法, partition by相比较于group by,能够在保留全部数据的基础上,只对其中某些字段做分组排序,下面就来介绍一下具体用法,感兴趣的可以了解一下
    2024-02-02
  • php mysql访问数据库的步骤详解

    php mysql访问数据库的步骤详解

    这篇文章主要介绍了php mysql访问数据库的步骤详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • MySQL慢日志实践小结

    MySQL慢日志实践小结

    这篇文章主要介绍了MySQL慢日志实践小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 简单谈谈MySQL的loose index scan

    简单谈谈MySQL的loose index scan

    各种资料关于loose index scan的解释很拗口,其实等同于oracle的index skip scan。今天我们就来详细看看loose index scan的使用
    2015-12-12
  • 一起来了解mysql数据库

    一起来了解mysql数据库

    大家好,本篇文章主要讲的是一起来了解mysql数据库,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • MySQL错误日志Error Log从配置到故障排查的完全指南

    MySQL错误日志Error Log从配置到故障排查的完全指南

    在MySQL数据库运维中,遇到服务启动失败、连接异常、死锁等问题时,错误日志(Error Log)绝对是你的 排障利器,它默认开启,记录着 MySQL 启动、关闭及运行过程中的错误、警告与调试信息,本文将从配置查看、核心作用、进阶功能三个维度,带你全面掌握Error Log的使用技巧
    2026-02-02
  • mysql 通过拷贝数据文件的方式进行数据库迁移实例

    mysql 通过拷贝数据文件的方式进行数据库迁移实例

    这篇文章主要介绍了mysql 通过拷贝数据文件的方式进行数据库迁移实例的相关资料,需要的朋友可以参考下
    2016-11-11

最新评论