如何在 MySQL 中清理或调整 ibtmp1 文件的大小?

Posted

技术标签:

【中文标题】如何在 MySQL 中清理或调整 ibtmp1 文件的大小?【英文标题】:How to clean or resize the ibtmp1 file in MySQL? 【发布时间】:2017-05-04 03:40:21 【问题描述】:

mysql 5.7 引入了一个新文件 ibtmp1 用于在 InnoDB 中存储临时数据以提高性能。

但我注意到它的大小不断增加。在我的数据库服务器上,它的大小增加到 92GB。

有什么方法可以减小文件大小或删除文件无需重新启动服务器

谢谢

【问题讨论】:

可能有用:dba.stackexchange.com/questions/136627/… @TimBiegeleisen 这个解决方案需要重启,我无法承受停机时间。 @TimBiegeleisen 我正在寻找一种无需重启服务即可解决此问题的解决方案,因为在我的情况下,此文件的增长速度非常快.. 我赞成你的问题,这是我目前所能做的。我希望你能得到答案。 @TimBiegeleisen ,没问题...谢谢 【参考方案1】:

ibtmp1一旦创建完成,在不重启mysql服务的情况下,无法通过任何方法收缩。

有两种处理方式:

注意事项:在服务器启动时,你应该限制这个文件的大小:

 innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G

其中 max 5G 表示此文件大小限制为 5GB。

治愈:如果文件已经创建,您需要重新启动服务:

SET GLOBAL innodb_fast_shutdown = 0;
Shutdown MySQL
remove ibtmp1
start MySQL.

文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-temporary-tablespace.html

【讨论】:

运行 AWS RDS MySQL 5.7,“故障转移重启”足以截断此文件。 这个问题是针对原生 mysql 而不是云。 迷你教程:编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf。添加为最后一行:innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G(或 xG)。重启Mysql:sudo service mysql restart---查看/var/lib/mysql/ibtmp1处的文件大小。 我发现没有必要删除ibtmp1,当我重新启动mysql服务时,文件被调整了大小。 14.14 版 @JonHulka 问题是如果无法重新启动如何删除 - 所以预防胜于治疗..【参考方案2】:

在 mysql 5.7 及更高版本中,回收 ibtmp1 文件使用的空间所需要做的就是重新启动服务

不必设置 GLOBAL innodb_fast_shutdown = 0; 或手动删除文件。

【讨论】:

【参考方案3】:

要解决这个问题,只需执行以下步骤:

1- 运行此命令:sudo nano /etc/mysql/my.cnf

2- 在 [mysqld] 行下添加以下行 innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G

3- 保存文件。

4- 现在我们需要释放一些磁盘空间并删除 ibtmp1,我们可以通过重新启动 SQL 服务器来做到这一点:

sudo service mysql restart

【讨论】:

以上是关于如何在 MySQL 中清理或调整 ibtmp1 文件的大小?的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询优化-ibtmp1相关

mysql查询优化-ibtmp1相关

mysql案例~ ibtmp1临时表空间暴涨问题

在将数据输出回文本区域时,如何正确清理从文本区域接收的数据?

mysql ibtmp1 回收空间

如何清理MySQL 的查询缓存