当前位置: 首页 > news >正文

MySQL篇—迁移数据目录到新的本地路径

☘️博主介绍☘️

✨又是一天没白过,我是奈斯,DBA一名✨

✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌️

❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️❣️

    哈喽小伙伴们,今天我们来聊一聊如何快速应对MySQL存储数据路径空间不足的问题。当我们发现数据目录所在路径空间不足时,并且发现当前目录并非逻辑卷的时候,如何快速地将数据目录迁移到新的路径。接下来,我会详细介绍如何进行这种同机迁移操作。

    在本文中,我将介绍两种方式对数据目录进行迁移的方法:通过clone本地克隆数据的方式和直接使用mv命令的方式。对于想要了解clone插件原理的同学,可以参考我之前发布的文章。现在,让我们深入探讨这两种迁移方法。

    大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注。

目录

方式一:通过mv方式完成新路径的迁移(适用于各个版本)

方式二:通过clone本地克隆数据的方式完成同机目录迁移(只适用于8.0.17以上版本)

      


方式一:通过mv方式完成新路径的迁移(适用于各个版本)

    MySQL异机迁移一般采用mysqldump、mysqlpump、xtrabackup、clone等工具,这些工具都会记录当时实例的gtid方便进行主从搭建等操作。为了减少停机时间使用直接mv数据文件并且修改datadir参数即可快速完成目录更换,当然也可以采用异机迁移的方式完成。

注意:对于Oracle而言不能直接mv数据文件完成同机迁移,因为Oracle在启动的三个步骤中的第二步打开控制文件就会验证数据文件的路径,那么只是直接mv是不会通知控制文件的,所以需要在sqlplus中执行命令来告知数据文件路径发生变化。

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

mysql> show variables like '%datadir%';

[root@mgr1 3306]# service mysqld stop    ---通过service的方式关闭MySQL

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

[root@mgr1 3306]# mkdir /mysql_data/
[root@mgr1 3306]# chown -R mysql:mysql /mysql_data/[root@mgr1 3306]# mv /mysql/data/3306/data  /mysql_data/   ---mv移动数据文件目录到新的逻辑卷目录[root@mgr1 3306]# vi /mysql/data/3306/my.cnf

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

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

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

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

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

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

[root@mgr1 3306]# service mysqld startmysql> show variables like '%datadir%';

验证:
mysql> show databases;
mysql> select table_name from information_schema.tables;
mysql> select * from ded.bak11;  
mysql> select * from it.emp; 
mysql> select * from it.yg;  ---能查询到数据,表示数据恢复的没问题。可能存在表不能查询的情况,那么就是数据字典没有记录表的问题,需要多验证几张

    

      

方式二:通过clone本地克隆数据的方式完成同机目录迁移(只适用于8.0.17以上版本)

    想要了解clone插件原理的同学,可以参考我之前发布的文章。

    

本地克隆数据的用途:

1、备份实例到本地

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

        

本地克隆数据语法:

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

语法:

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

           

如何停止本地克隆:

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;

(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 tb 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)

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

mysql> show variables like '%datadir%';

[root@mgr1 3306]# service mysqld stop       ---通过service的方式关闭MySQL

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

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

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

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

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

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

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

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

[root@mgr1 3306]# service mysqld start

mysql> show variables like '%datadir%';

验证:

mysql> show databases;

mysql> select table_name from information_schema.tables;

mysql> select * from ded.bak11;  

mysql> select * from it.emp; 

mysql> select * from it.yg;     ---能查询到数据,表示数据恢复的没问题。可能存在表不能查询的情况,那么就是数据字典没有记录表的问题,需要多验证几张

相关文章:

MySQL篇—迁移数据目录到新的本地路径

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...

【FPGA】高云FPGA之IP核的使用->PLL锁相环

FPGA开发流程 1、设计定义2、设计输入3、分析和综合4、功能仿真5、布局布线6、时序仿真7、IO分配以及配置文件(bit流文件)的生成8、配置(烧录)FPGA9、在线调试 1、设计定义 使用高云内置IP核实现多路不同时钟输出 输入时钟50M由晶…...

程控设备和电脑通信的总线和协议选择

文章目录 程控设备都通过什么协议和总线和电脑通信?工控设备都使用什么通信协议与电脑通信?各种工控设备通信协议的优缺点如何选择适合工控设备的通信协议?各种工控设备通信总线的优缺点如何判断一种总线是否适合特定的应用场景?程控设备都通过什么协议和总线和电脑通信? …...

鸿蒙开发-UI-组件导航-Navigation

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 文章目录 目录 一、基本概念 二、页面显示模式 1.自适应模式 2.单页面模式 3.分栏模式 三、标题栏模式 1.Mini模式 2.Full模式 四、菜单栏 五、工具栏 六、案例 …...

Codeforces Round 922 (Div. 2)(A~D)补题

A题考虑贪心,要使使用的砖头越多,每块转的k应尽可能小,最小取2,最后可能多出来,多出来的就是最后一块k3,我们一行内用到的砖头就是 m 2 \frac{m}{2} 2m​下取整,然后乘以行数就是答案。 #inclu…...

Seata下载与配置、启动

目录 Seata下载Seata配置启动Seata Seata下载 首先,我们需要知道我们要使用哪个版本的seata,这就要查看spring-cloud-alibaba版本说明,找到我们对应的seata。 spring-cloud-alibaba版本说明: 地址链接 下面是部分版本说明: s…...

什么是TCP三次握手、四次挥手?

1、三次握手 你(客户端)给一个朋友(服务器)打电话,告诉他你想开始对话。这就像是发送一个SYN(同步序列编号)信号,表示你想开始建立连接。(client向server发送syn,seqx,此时client验证client发送能力正常。client置为SYN SENT状态)…...

C++程序在开机自启和定时器执行时遇到的问题和解决方法

遇到的错误如下: Camera is created.load vfvlog.[dll/so] failed for dll[/vfvlog.so] unexistedLoadDbgConfig, LoadFile fail, err:-3, errno: No such file or directoryqt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could not load the Qt platfo…...

R17 extended DRX(eDRX)

根据工业无线传感器的要求,电池至少可持续使用数年。 在NB-IoT和LTE eMTC中,也有类似的要求。 为了满足极长电池寿命的要求,NB-IoT和LTE eMTC在Release 13中为RRC IDLE UE引入了扩展DRX,在Release 16中为RRC INACTIVE UE引入了eDRX,上面是LTE 引入eDRX的背景。 一 概述 到…...

Debezium发布历史102

原文地址: https://debezium.io/blog/2021/02/24/debezium-1-5-beta1-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 1.5.0.Beta1 发布 2021 年 2 月 24 日 作者: Gu…...

探索自然语言处理在改善搜索引擎、语音助手和机器翻译中的应用

文章目录 每日一句正能量前言文本分析语音识别机器翻译语义分析自然语言生成情感分析后记 每日一句正能量 努力学习,勤奋工作,让青春更加光彩。 前言 自然语言处理(NLP)是人工智能领域中与人类语言相关的重要研究方向&#xff0c…...

echarts:获取省、市、区/县、镇的地图数据

目录 第一章 前言 第二章 获取地图的数据(GeoJSON格式) 2.1 获取省、市、区/县地图数据 2.2 获取乡/镇/街道地图数据 第一章 前言 需求:接到要做大屏的需求,其中需要用echarts绘画一个地图,但是需要的地图是区/县…...

Java_简单模拟实现ArrayList_学习ArrayList

文章目录 一、 了解线性表和顺序表区别1.线性表2.顺序表 二、模拟实现1.定义接口2.定义MyArrayList3.成员变量以及构造方法4.实现打印数组5.实现add方法6.实现查找某个数是否存在contains或者某个数的下标indexOf7.获取或更改pos位置的值 get和set8.获取数组大小 size9.删除某个…...

动手学深度学习(一)深度学习介绍2

目录 二、起源 三、深度学习的成功案例: 四、特点: 五、小结: 二、起源 为了解决各种各样的机器学习问题,深度学习提供了强大的工具。 虽然许多深度学习方法都是最近才有重大突破,但使用数据和神经网络编程的核心思…...

vmware网络配置,VMware的三种网络模式详解与配置

vmware为我们提供了三种网络工作模式 vmware为我们提供了三种网络工作模式, 它们分别是: Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 VMware虚拟机的三种网络类型的适用场景如下…...

【Ubuntu】安装hbase

前提 需要安装java 安装 HBase 下载并解压 HBase 安装包: wget https://dlcdn.apache.org/hbase/2.5.7/hbase-2.5.7-bin.tar.gz tar -zxvf hbase-2.5.7-bin.tar.gz配置 HBase 环境变量: export HBASE_HOME/path/to/hbase-2.5.7 export PATH$PATH:$H…...

ubuntu16.04环境轻松安装和应用opencv4.9.0(基于源码编译)

目录 一、环境准备 1、安装cmake 2、安装依赖 3、从github上下载opencv4.9.0.zip 二、安装opencv4.9.0 1、解压4.9.0.zip 2、进入build目录编译 3、安装编译好的相关库 4、修改opencv配置文件并使其生效 5、添加PKG_CONFIG路径,并使其生效 三、opencv环境…...

FastBee开源物联网平台2.0开源版发布啦!!!

一、项目介绍 物美智能(wumei-smart)更名为蜂信物联(FastBee)。 FastBee开源物联网平台,简单易用,更适合中小企业和个人学习使用。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等。 系统后端采用Spring boot;前端采用…...

【NeRF和NLP】一些观察感悟,碎碎念

NeRF的paper,有几个感想: NeRF读的时候感觉和diffusion思路特别像,训练目标是一个很小很小的子步骤,大大简化了训练难度NeRF建模的是“真实”世界,其用模型隐含的存储了真实世界的体素(场)模型…...

Python程序设计 基础数据类型

1.1 编程规范 注释 python注释也有自己的规范,在文章中会介绍到。注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的。 在说规范…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...