问题:

使用命令发现磁盘使用率为 100% 了,还剩几十兆。

一系列神操作

备份数据库,删除实例、删除数据库表、重启 mysql 服务.结果磁盘空间均为释放

怎么办

网上查了很多资源,说要进行磁盘碎片化整理。原因是 datafree 占据的空间太多啦。具体可以通过这个 sql 查看。

SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables WHERE TABLE_NAME = 'datainfo';

这个是后来的图了,之前的图没有留,当时显示一张表里的 data_free 都达到了 20 个 G。

![ ](https://upload-images.jianshu.io/upload_images/14371339-9c2f5b1ab4f3d362.png!large?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

网上推荐的做法如下所示,对表格进行碎片化整理。

ALTER TABLE datainfo ENGINE=InnoDB;
ANALYZE TABLE datainfo;optimize table datainfo;

僵局:

查看数据库版本为 5.562 不支持 inodb,要么选择升级数据库。正在这时,有个不好的消息发生了,那张表格给删掉了,但是磁盘空间还是没有释放啊。所以对表进行碎片化整理的路也走不通了,因为表没了。。。

后来的神操作

1、使用命令查看 mysql 安装的位置和配置文件所在的地方

mysql 1118 945 0 14:28 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

2、关闭 mysql

service mysql stop

3、删除 datadir 目录下的 ibdata1、ib_logfile0 ib_logfile1 这些文件

4、 移动 mysql 的启动参数

mv /etc/my.cnf ./abc

5、重新启动 mysql 发现磁盘空间释放了

service mysql start

磁盘空间终于释放了

下一步数据库还原

1、采用 navicate 备份工具,进行数据库备份

备份成功后生成了,生成 psc 文件。

200409141055.psc

2、新建一个数据库实例,设置数据库名和字符集

3、然后对备份数据库进行还原,点击还原

4、开始进行还原

第一次还原后发现还原后数据库表建成功了,但是表里面没有数据。
后来网上查找资料发现是,遇到错误就停止了。所以更改了还原的配置,再次进行还原。

之前是这样设置的

还原时当成一个事务进行了,遇到错误就停止了。
更改配置

重新进行还原,数据库里的数据有了,并且验证没有问题。

问题解决

mysql 碎片化产生的原因

(1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大;

(2)当执行插入操作时,MySQL 会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片;

(3)当 MySQL 对数据进行扫描时,它扫描的对象实际是列表的容量需求上限,也就是数据被写入的区域中处于峰值位置的部分;

清除碎片的优点:

降低访问表时的 IO,提高 mysql 性能,释放表空间降低磁盘空间使用率
注意

1.MySQL 官方建议不要经常 (每小时或每天) 进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可 (我们现在是每月凌晨 4 点清理 mysql 所有实例下的表碎片)。

2.在 OPTIMIZE TABLE 运行过程中,MySQL 会锁定表。因此,这个操作一定要在网站访问量较少的时间段进行。

3.清理 student 的 105 万条数据, OPTIMIZE TABLE 库.student;本地测试需要 37 秒。

自测

大家可以用这条语句看看自己的系统的 datafree 大不大
show table status from 表名;

作者:会飞的猪
原文链接:https://testerhome.com/topics/23049
来源:testerhome

mysql sum 删除_如果mysql磁盘满了,会发生什么?还真被我遇到了~相关推荐

  1. mysql 撤销删除_线上磁盘告警,mysql无法释放空间,踩了个大坑,大家记得别踩坑...

    活动买的阿里云服务器磁盘告警了,活动买的磁盘只有40g,里面装的宝塔环境,除了网站程序还有mysql数据库.数据库整个大概20多G. 有几个表数据达到千万级别了,在不扩容的情况下,老王选择了删除部分不 ...

  2. mysql sum 慢_故障分析 | MySQL 优化案例 - select count(*)

    作者:xuty 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本文关键字:count.SQL.二级索引 一.故事背景 项目组联系我说是有一张 50 ...

  3. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  4. mysql导致根目录爆满_因为根目录磁盘满了,我移动数据和软件造成mysql启动不了,查原因mysql.sock不在了...

    今天刚接手新项目的服务器,不知道以前谁搭建的因为要备份数据库,但是发现空间不足/根目录满的,然后我移动软件和文件造成mysql启动不了root@localhost~]#/data 今天刚接手新项目的服 ...

  5. mysql多大_洞悉MySQL底层架构:游走在缓冲与磁盘之间

    提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系.为此我撰 ...

  6. mysql禁止数据被删除_为什么MySQL不建议delete删除数据

    我负责的有几个系统随着业务量的增长,存储在MySQL中的数据日益剧增,我当时就想现在的业务方不讲武德,搞偷袭,趁我没反应过来把很多表,很快,很快啊都打到了亿级别,我大意了,没有闪,这就导致跟其Join ...

  7. MySQL delete删除数据后,释放磁盘空间

    当 MySQL 数据库服务删除部分数据后:有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放.以下是对这种情况的简单说明: 一.删除表|清空数据表 当执行删除数据表或者清空数据表 ...

  8. 删除+mysql+用户密码_误删除mysql中的所用用户,如何重新设置root账号和密码

    在练习mysql语句的时候,使用delete将数据库中的所有用户删除了,其中也包括root用户.并进行了flush privileges:这时候发现重新登入mysql已经不能正常登陆.对此我们要重新设 ...

  9. 删除 mysql ibd文件_误删除MySQL数据库表的ibd文件怎么办

    很多年前,学习oracle10g的技术时,看过盖国强老师写的一篇文章,在linux系统中,oracle数据库存活的时候,用系统命令rm删除一个数据文件,这个时候找到删除文件的fd文件句柄,就可以将删除 ...

  10. mysql语句命令_常用MySQL语句(命令行)

    # 命令行客户端MySQLMySQL是一个关系型数据库管理系统 安装MySQL服务端软件使用: sudo apt-get install mysql-server 安装MySQL客户端软件使用: su ...

最新文章

  1. 第一次 C语言课程设计
  2. 解决Mybatis启动报错: Invalid bound statement (not found)
  3. 添加nginx为系统服务(service nginx start/stop/restart)
  4. 微信分享接口示例(设置标题、缩略图、连接、描述),附demo下载
  5. SAP中国招聘内部顾问,工作职责是做客户项目,ABAP开发
  6. Win11手机应用大改!全新界面来袭
  7. Oracle高可用概述(HA与RAC的关系解惑)
  8. Oracle提示“ORA-04098:触发器‘XXX_TRIGGER’无效且未通过重新验证”
  9. C/C++中的static和extern关键字
  10. nmake下一些错误的解决办法
  11. dllMain函数的作用
  12. canva怎么组合_教你使用Canvas合成图片
  13. 僵尸进程和孤儿进程-(转自Anker's Blog)
  14. C/C++ 学习日记3:制作带有界面的植物大战僵尸助手(基于MFC)
  15. 腾讯2019技术岗笔试 小Q非常喜欢复读,有时候,小Q会得到某个字符串S。这时他会把s不断重复不断重复连成一个无限长的串。比如说,小Q现在得到一个串abc,他会直一复读, 那么形成的字符串就是:
  16. js ,DOM节点,制作点名器
  17. 短时傅里叶变换(STFT)实例
  18. STC89C51——定时器/计数器介绍及程序配置
  19. 微型计算机的集成在微,微型计算机的( )集成在微处理器芯片上。
  20. 用matlab来画表格(实例:处理光电效应及普朗克常数的实验报告)

热门文章

  1. Win7如何自定义鼠标右键菜单 添加新建文本文档
  2. 000 初步使用Kotlin开发Android应用
  3. ESRI.ArcGIS.Controls.AxMapControl
  4. Android 设计模式:(一)策略模式 —— 封装行为的大局观
  5. r(AB)=r(B)则方程组ABX=0与Bx=0有完全相同的解
  6. 服务器如何修改内存大小,如何限制docker容器的内存大小
  7. freetype字体位图转距离场_关于freetype的移植和其官方demos的使用总结
  8. 获取extjs 选择后的表头_OD数据获取脚本分享
  9. 拓端tecdat|R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法
  10. 拓端tecdat|R语言网络和网络流的可视化实践:通勤者流动网络