记一次Linux虚拟机硬盘空间不足的处理方案


**起因:**公司的服务器是windows的,而我需要一个基于Linux的dev环境,于是用vmvare创建了一个centos7的系统实例,里面安装mysql5.7作为dev环境数据库,安装在根目录,后来由于数据量激增,将根目录塞满了,导致mysql无法继续增加数据。
环境: Centos7-64
目的:解决根目录空间不足问题,并且不损坏任何数据。

  • 自己折腾了一天了,由于水平有限,跳了很多坑。坑就不写了,下面写解决方案。

一. 找到问题

  • 使用命令:df -hT查看当前文件系统各种信息。

    这里显示我的根目录已用100%,这就是我这次遇到的问题所在。

对根目录扩容和对非根目录扩容是两个概念,因为普通目录可以 先杀死目录下进程–>将分区移除挂载–>将分区扩容–>重新挂载–>恢复进程但是根目录不行。根目录里都是系统核心进程。Linux

二. 用vmvare给虚拟机扩容

  • 关闭虚拟机中的centos7的系统实例
  • 右键–设置–参照下图
  • 但是额外分的这部分存储,还没有应用到虚拟的Centos7实例中。

三. 分析

  • df -hT命令可以看到根目录被挂载的分区是:/dev/sda3
  • 使用命令:fdisk -l查看磁盘信息,这里我们重点关注/dev/sda3的system这个属性,我这里是Linux,表示是Linux默认的磁盘管理机制。
  • 观察这一点很重要,据我所知,Linux默认的磁盘管理机制这种没办法直接动态扩容,除非杀死/dev/sda3这个分区的挂载点也就是根目录里面运行的进程。
  • 如果是Linux LVM,恭喜你,非常容易扩容,具体操作自行百度,网上很多,简单的操作几个步骤即可。

鉴于以上分析。很明显,我在不损失任何数据的情况下,没办法对根目录扩容,这时候就准备换个思路。既然是mysql的数据量过大造成根目录满,那我可以新建一个文件夹,然后新建一个分区,将这个分区挂载到这个文件夹上,然后将mysql的数据文件搬过来不就行了。

四. 新建分区,格式化分区,新建文件夹,挂载

  • 使用fdisk /dev/sda命令,然后输入p按回车,展示当前分区列表,输入m按回车,可以查看help操作,一看就懂的。【注意:我这里命令中的/dev/sda是分区名,请不要照抄,自行对号入座
  • 使用n新建分区,分区号默认是当前已有最大分区号+1,分区start,分区end都选默认就行。我这里新建的是sda4分区。【注意:这里的前提是你的主分区或者拓展分区还有空位置
  • 使用w保存你的操作,使用q退出
  • 如果分区顺利建完,可以用fdisk -l看到你刚刚建的分区了
  • 分区格式化:首先,通过df -hT查看分区的文件系统类型,因为我要转移的mysql数据文件来自/dev/sda3分区,它的类型是xfs,所以sda4分区就要使用xfs格式格式化了,格式化命令mkfs -f xfs /dev/sda4
  • 新建文件夹:mkdir /usr/mysql-data,【这里你可以自定义】
  • 挂载:mount /dev/sda4 /usr/mysql-data

五. 将新建的分区,设置为开机自动挂载

  • 查看分区id:ls -l /dev/disk/by-uuid/
  • 修改vim /etc/fstab, 最小码新写一行,如下【uuid请换掉
UUID=4366aadb-6ee8-46cd-8708-b4e2f70b2860 /usr/mysql-data         xfs     defaults        0 0
  • 1
  • 重启:reboot
  • 使用df -hT查看,可以看到新建的分区挂载到新建的文件夹上了,完美,可以继续下一步

这一节很重要,另外,fstab里面的格式一定要对齐

六. 对mysql的一些操作

  • 通知相关人员,我要暂时关闭mysql
  • 停止mysql:systemctl stop mysqld
  • copy文件:```cp -r /var/lib/mysql /usr/mysql-data/mysql``
  • 修改/etc/my.cnf文件中的两个属性,如下
#datadir=/var/lib/mysql
datadir=/usr/mysql-data/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/usr/mysql-data/mysql/mysql.sock
  • 1
  • 2
  • 3
  • 4
  • 启动mysql:systemctl start mysqld
  • 尝试使用命令行或者navicat等连接mysql查看是否能连接,数据库是否缺失

七. 收尾工作

    • 删除/var/lib/mysql下面的内容:rm -rf /var/lib/mysql/
    • 查看空间:df -hT,看根目录是否有空间了
    • 再次确认无误后,通知相关人员,mysql可以继续使用了。

记一次Linux虚拟机分配内存不足的处理方案的更多相关文章

  1. Virtualbox修改虚拟机分配内存的大小

    起因:因为虚拟机刚开始分配的内存太小,导致太卡, 解决方法:修改虚拟机分配内存的大小 方法一:必须在关闭ubuntu的前提下进行,否则无法修改 点击设置 系统选项 主板中的内存大小 之后开启即可 方法 ...

  2. Linux进程分配内存的两种方式--brk() 和mmap()

    如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...

  3. Linux内核分配内存的方式

    page = alloc_pages(GFP_KERNEL, get_order(1234));分配失败返回NULLGFP_KERNEL  ---> 分配标志,当没有足够内存分配时,睡眠阻塞,直 ...

  4. Linux虚拟机centos系统安装

    linux 其他知识目录 安装完后如果虚拟机网络不通请参考:虚拟机网络不通故障解决 1.centos6.9安装 后面安装出了点问题,ip没有并且eth0网卡找不到,不过重新配置ifcfg-eth0后重 ...

  5. Linux内核笔记——内存管理之slab分配器

    内核版本:linux-2.6.11 内存区和内存对象 伙伴系统是linux用于满足对不同大小块内存分配和释放请求的解决方案,它为slab分配器提供页框分配请求的实现. 如果我们需要请求具有连续物理地址 ...

  6. JDK1.8-Java虚拟机运行时数据区域和HotSpot虚拟机的内存模型

    目录 介绍 官方文档规定的运行时数据区域 程序计数器 Java虚拟机栈 本地方法栈 虚拟机栈和本地方法栈溢出 Java堆 演示堆内存溢出 方法区 运行时常量池 演示方法区溢出 HotSpot虚拟机的内 ...

  7. 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))

    java虚拟机的内存区域分配   在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...

  8. 《深入理解Java虚拟机》内存分配策略

    上节学习回顾 1.判断对象存活算法:引用计数法和可行性分析算法 2.垃圾收集算法:标记-清除算法.复制算法.标记-整理算法 3.垃圾收集器: Serial:新生代收集器,采用复制算法,单线程. Par ...

  9. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  10. linux设备驱动归纳总结(五):1.在内核空间分配内存【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-79134.html linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxx ...

随机推荐

  1. IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!

    一.本文内容概述 WiFi对于现在的家庭来说,属于司空见惯的上网方式,但很多情况下,家里房间多.空间大.杂物乱的情况下,WiFi的信号就受影响.为什么WiFi信号会受影响?什么情况下该使用何种方式组网 ...

  2. 【狂神说Java】Java零基础学习笔记-Java数组

    [狂神说Java]Java零基础学习笔记-Java数组 Java数组01:数组的定义 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数 ...

  3. Python依赖库的导入、导出 | 解决内网安装模块问题 | Python

    通过在有网的机器A下下载所有的依赖包至package文件夹下: pip3 download -r requirements.txt -d ./package 将依赖包移动至没有网的机器B下,指定依赖包 ...

  4. git worktree同一个仓库多个分支并行开发和管理

    介绍 Git Worktree 是 Git 提供的一个功能,允许你在同一个仓库中同时工作在多个工作目录中,每个目录都有自己的工作树和索引.这对于同时处理多个分支或版本非常有用. 常用命令 命令 解释 ...

  5. nginx平台初探-2

    handler模块简介 相信大家在看了前一章的模块概述以后,都对nginx的模块有了一个基本的认识.基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-ba ...

  6. MySQL---事务、死锁、mvcc原理

    前言 在MySQL的众多存储引擎中,只有InnoDB支持事务,所有这里说的事务隔离级别指的是InnoDB下的事务隔离级别. MySQL 是支持多事务并发执行的.否则来一个事务处理一个请求,处理一个人请 ...

  7. SpringBoot的两种启动方式原理

    使用内置tomcat启动 配置案例 启动方式 IDEA中main函数启动 mvn springboot-run java -jar XXX.jar 使用这种方式时,为保证服务在后台运行,会使用nohu ...

  8. langchain-agent

    Agent 参考:LangChain 实战:Agent思维 大模型是被训练出来的,知识是有时间限制的,所以当进行问答时,可以结合本地知识库和调用搜索或在线API来增强自身能力,这些不属于大模型的内部数 ...

  9. Pycharm:鼠标滚动控制字体大小

    Pycharm字体放大的设置 1.File -> setting -> Keymap ->在搜寻框中输入:increase -> Increase Font Size(双击) ...

  10. 面向对象(下)的阶段性复习:关键字abstract、模板方法的设计模式、关键字interface、代理模式、工厂的设计模式、类的结构内部类

    关键字:abstract abstract: 抽象的1.可以用来修饰:类.方法2.具体的:abstract修饰类:抽象类 * > 此类不能实例化 * > 抽象类中一定有构造器,便于子类实例 ...