Documentation Home

B.3.3.5 MySQL存放临时文件的位置

在 Unix 上,MySQL 使用TMPDIR 环境变量的值作为存储临时文件的目录的路径名。如果TMPDIR 未设置,MySQL 使用系统默认值,通常是 /tmp/var/tmp/usr/tmp

在 Windows 上,MySQL 按顺序检查 TMPDIRTEMPTMP环境变量的值。对于第一个被发现被设置的,MySQL 使用它并且不检查剩下的那些。如果 、 或 都没有TMPDIR设置 TEMPTMPMySQL 使用 Windows 系统默认值,通常是 C:\windows\temp\.

如果包含您的临时文件目录的文件系统太小,您可以使用mysqld --tmpdir选项在您有足够空间的文件系统中指定一个目录。

--tmpdir选项可以设置为以循环方式使用的多个路径的列表。路径应:在 Unix 上以冒号字符 ( ) 分隔;,在 Windows 上以分号字符 ( ) 分隔。

笔记

为了有效地分散负载,这些路径应该位于不同的物理磁盘上,而不是同一磁盘的不同分区。

如果 MySQL 服务器作为副本,则可以设置系统变量 replica_load_tmpdir(从 MySQL 8.0.26 开始)或 (在 MySQL 8.0.26 之前)在复制语句slave_load_tmpdir时指定一个单独的目录来存放临时文件。LOAD DATA该目录应该位于基于磁盘的文件系统(而不是基于内存的文件系统)中,以便用于复制 LOAD DATA 的临时文件可以在机器重启后继续存在。该目录也不应该是在系统启动过程中被操作系统清除的目录。但是,如果临时文件已被删除,复制现在可以在重新启动后继续。

如果mysqld终止 ,MySQL 会安排删除临时文件 。在支持它的平台(例如 Unix)上,这是通过在打开文件后取消链接来完成的。这样做的缺点是名称不会出现在目录列表中,并且您不会看到一个大的临时文件填满了临时文件目录所在的文件系统。(在这种情况下, lsof +L1可能有助于识别与mysqld关联的大文件。)

在排序(ORDER BYGROUP BY)时,MySQL 通常会使用一个或两个临时文件。所需的最大磁盘空间由以下表达式确定:

(length of what is sorted + sizeof(row pointer))
* number of matched rows
* 2

行指针的大小通常为四个字节,但对于真正的大表,将来可能会增长。

对于某些语句,MySQL 会创建未隐藏且名称以 . 开头的临时 SQL 表 #sql

一些SELECT查询创建临时 SQL 表来保存中间结果。

重建表并且不使用该ALGORITHM=INPLACE 技术联机执行的 DDL 操作会在与原始表相同的目录中创建原始表的临时副本。

在线DDL操作可能会使用临时日志文件记录并发DML,创建索引时使用临时排序文件,重建表时使用临时中间表文件。有关详细信息,请参阅 第 15.12.3 节,“在线 DDL 空间要求”

InnoDB用户创建的临时表和磁盘内部临时表是在ibtmp1MySQL 数据目录中命名的临时表空间文件中创建的。有关详细信息,请参阅 第 15.6.3.5 节,“临时表空间”

另见 第 15.15.7 节,“InnoDB INFORMATION_SCHEMA 临时表信息表”

可选EXTENDED修饰符导致 SHOW TABLES列出由失败ALTER TABLE语句创建的隐藏表。请参阅第 13.7.7.39 节,“SHOW TABLES 语句”