| 宝塔临时文件ibtmp1占用过高导致磁盘爆满及MySQL延迟怎么处理 |
|
有用户反馈,自己的磁盘爆满,但是本身网站没有特别多内容,经过排查发现是一个ibtmp1的文件占用特别大,删除后立马又满了
所有网站加起来可能才100多G,而这个文件竟然达到了惊人的200多G。首先要处理这个问题,我们要了解ibtmp1这个文件是啥。 什么是 ibtmp1 文件? ibtmp1 是 InnoDB 临时表空间文件,用于存储 MySQL InnoDB 引擎产生的临时数据。它主要用途包括: 排序操作(ORDER BY、GROUP BY):当结果集过大无法完全放入内存时,临时数据会写入 ibtmp1。 大事务操作:如批量插入、更新、大量 JOIN 或子查询操作。 临时表存储:内存临时表不足时,MySQL 会自动使用磁盘临时表,而临时表也会放到 ibtmp1。 简单理解:ibtmp1 就是 InnoDB 的“临时工作区”,保证大数据操作不会溢出内存。 为什么ibtmp1文件会这么大? 大事务操作频繁 批量更新、删除或导入大量数据时,InnoDB 会使用临时表空间存储中间数据。 复杂查询导致磁盘排序 当排序或 GROUP BY 操作的数据量超过 tmp_table_size 和 max_heap_table_size 时,数据会写入磁盘临时表,也会增加 ibtmp1 大小。 长时间运行的事务 事务未提交时,临时表空间无法释放,导致文件持续增长。 临时表空间不可回收 MySQL 8.0 之后,ibtmp1 文件通常不会自动收缩,只会在服务器重启后重新创建,重启前会一直占用磁盘。 密集的计划任务及备份 因为网站众多需要品牌提交计划并大量的进行扎堆备份 怎么处理ibtmp1文件过大问题? 1、首先不要直接删除文件 2、进入宝塔找到MySQL重启下数据库
3、一般重启完成后该文件会下降,然后我们在MySQL管理内找到性能调整,将tmp_table_size的值调整至服务器内存内的缓存内,保证值小于服务器的最大内存例如64/128/256/512,具体根据自身需求来,或者直接点击优化方案,4G内存的服务器改为2-4G。
4、在MySQL管理内点击配置修改,新增一栏限制临时表大小的代码 innodb_temp_data_file_path = ibtmp1:128M:autoextend:max:1G 其中max:1G代表允许占用的最大空间,这个值建议根据自己系统盘或者数据盘的大小来,比如磁盘闲置200G空间,建议max值设置为100G以内。
5、点击保存配置后,重启MySQL
6、操作完成后,就不会有磁盘爆满的情况了,不过如果后面依然出现io爆满等情况,建议备份完成数据后重装宝塔解决(谨慎操作!!!),因为这可能是宝塔用久了,你也不知道哪些数据在暴增了。 最重要的一点,在新安装宝塔时切记就先将网站的默认默认,备份的默认目录,以及数据库的默认目录先设置好。 |








《中华人民共和国公安部网安备案》编号 赣公网安备
36010302000229号
《中华人民共和国增值电信业务经营许可证》编号
云牌照/IDC/ISP:B1-20224338