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

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

在 Windows 上,MySQL 按顺序检查TMPDIR,温度, 和TMP环境变量。对于找到的第一个设置,MySQL 使用它并且不检查剩余的那些。如果没有TMPDIR,温度, 要么TMP都设置了,MySQL 使用 Windows 系统默认值,通常是C:\windows\temp\.

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

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

笔记

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

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

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

排序时(订购方式要么通过...分组),MySQL 通常使用一两个临时文件。所需的最大磁盘空间由以下表达式确定:

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

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

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

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

重建表且不使用联机执行的 DDL 操作算法=就地技术在与原始表相同的目录中创建原始表的临时副本。

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

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

也可以看看第 15.15.7 节,“InnoDB 信息_SCHEMA 临时表信息表”.

可选的扩展修饰原因显示表格列出失败创建的隐藏表更改表陈述。看第 13.7.7.39 节,“SHOW TABLES 语句”.