Ubuntu磁盘使用率100%造成MySQL服务无法继续运行

本文记录了一次因服务器硬盘空间不足导致MySQL无法正常工作的问题排查过程。通过检查MySQL配置及服务器磁盘使用情况,最终定位到Tomcat日志文件占用大量空间,并提供了清理日志文件的Shell脚本。

问题发成场景:服务器端向MySQL插入一条数据,报错,提示the table XXX is full。

1、根据提示以为该表设置了存储上限,查看该表的存储上限tmp_table_size 和 max_heap_table_size ,发现并没有超出限制。

2、重启Mysql服务,service mysql restart,发现MySQL服务无法启动.

3、使用service mysql status查看当前MySQL服务状态,提示mysql.service failed because the control process exited with error code;mysql.service:main process exit,code=exited,status=1/failure。

4、根据网上一哥们的建议,有可能是硬盘满了,使用df -h 查看硬盘存储情况,发现/dev/vda1 的使用情况已经是100%了。

5、思考了一波,有可能是日志文件存储太多造成的,去往MySQL日志路径,发现没有很大。

6、去往Tomcat日志目录logs,发现日志存放太多了,问题源就在这里,这里使用到一个命令:du --max-depth=1 ,作用就是查询当前目录下一级目录的文件大小


7、清空catalina.out文件,命令:cat /dev/null >catalina.out

8、当然这样还是不能彻底解决问题,我们可以写一个shell脚本让他定期每天/每周执行,帮助我们删除比如说一周前的日志文件,或者将日志文件备份到其他地方

#!/bin/bash
logs_paths[0]="/root/workspace/tomcat/logs"
for logs_path  in ${logs_paths[@]};
do

        find $logs_path -mtime +7 -name "localhost_access_log.*.txt" -exec rm -rf {} \;
        find $logs_path -mtime +7 -name "catalina.*.log" -exec rm -rf {} \;
        find $logs_path -mtime +7 -name "manager.*.log" -exec rm -rf {} \;
        find $logs_path -mtime +7 -name "host-manager.*.log" -exec rm -rf {} \;
        find $logs_path -mtime +7 -name "fileservice.log.*" -exec rm -rf {} \;
        find $logs_path -mtime +7 -name "localhost.*.log" -exec rm -rf {} \;
     #备份日志
        cp   $logs_path/catalina.out  $logs_path/catalina.`date +%Y-%m-%d`.log 
        #清空日志  
      cat /dev/null > $logs_path/catalina.out 
    echo $logs_path
done
9、清理之后,启动MySQL服务,成功!

### 虚拟机磁盘占用100%的原因分析 虚拟机磁盘占用率达到100%可能由多种原因引起,其中包括但不限于虚拟内存镜像文件的持续写入、操作系统内部机制导致的高频率硬盘访问以及逻辑卷管理中的容量分配不足等问题。以下是针对不同场景的具体解决方案。 --- #### 方案一:关闭虚拟内存实时镜像功能 从 VMware Workstation 版本 10 开始,默认情况下每个虚拟机会在运行时于主机硬盘上生成一个内存实时镜像文件。此文件会随着虚拟机内存的变化而不断更新,从而显著增加磁盘 I/O 压力[^1]。 可以通过修改全局配置文件 `settings.ini` 来禁用这一行为: ```ini mainMem.useNamedFile = "FALSE" ``` 上述配置应添加至路径 `C:\ProgramData\VMware\VMware Workstation\settings.ini` 中。完成更改后需重新启动 VMware 工作站以使设置生效。 --- #### 方案二:扩展 Linux 根分区大小 如果虚拟机内的操作环境为 Ubuntu 或其他基于 LVM 的 Linux 系统,则可能是由于根目录 `/` 所属逻辑卷的空间已耗尽所致。即使物理存储设备仍有大量剩余空间,逻辑卷未被适当调整也会引发此类问题[^2]。 具体处理流程如下: 1. **检查当前磁盘状态** 使用命令查看各挂载点的实际使用情况。 ```bash df -h ``` 2. **确认硬件资源分布** 列出所有可用块设备及其关联关系。 ```bash lsblk ``` 3. **扩展逻辑卷** 对目标逻辑卷进行扩容操作,例如将其增大 100GB。 ```bash sudo lvextend -L +100G /dev/mapper/ubuntu--vg-ubuntu--lv ``` 4. **调整文件系统尺寸** 更新文件系统的元数据以匹配新的逻辑卷大小。 ```bash sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv ``` 完成后再次执行 `df -h` 验证结果。 --- #### 方案三:合理规划虚拟内存交换区 对于 Windows 类型的客户机而言,其默认策略是创建动态扩展的页面文件(Pagefile.sys)。当工作负载较重时,可能会频繁触发页交换动作进而填满整个驱动器[^3]。建议依据实际需求手动设定固定大小的虚拟内存范围来缓解压力。 计算公式可参照以下标准: \[ \text{Virtual Memory (MB)} = (\text{Physical RAM (GB)}) \times 1024 \times 1.5 \] 进入高级系统属性界面完成相应参数定制即可。 --- #### 方案四:排查特定应用引起的异常消耗 某些数据库管理系统如 MySQL,在面对大规模查询或者复杂事务处理期间有可能借助临时表暂存中间结果集。倘若这些对象未能及时清理干净便容易造成存储子系统过载现象[^4]。因此有必要定期监控进程活动状况并采取必要措施加以干预。 另外需要注意的是,部分后台服务比如索引引擎或预取优化组件也可能成为潜在诱因之一[^5]。通过停止不必要的任务队列能够有效降低整体负荷水平。 --- ### 总结 综上所述,解决虚拟机磁盘占用率过高可以从多个角度入手,包括但不限于调整宿主机层面的相关选项、扩充来宾 OS 内部结构布局以及精简业务流程等方面展开探索实践直至最终达成预期目的为止。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值