在Unix上,MySQL使用环境变量/tmp
、
/var/tmp
或
/usr/tmp
。
在Windows上,MySQL按顺序检查TEMP
和
TMP
环境变量的值。对于找到的第一个设置的变量,MySQL使用它,不再检查剩下的变量。如果
TEMP
和
TMP
都未设置,MySQL使用Windows系统默认值,通常是
C:\windows\temp\
。
如果包含临时文件目录的文件系统太小,可以使用mysqld --tmpdir
选项指定一个文件系统中的目录,其中有足够的空间。
可以将--tmpdir
选项设置为多个路径的列表,这些路径将以轮询方式使用。在Unix上,路径之间用冒号(:
)分隔,在Windows上用分号(;
)分隔。
为了有效地分配负载,这些路径应该位于不同的物理磁盘上,而不是同一个磁盘的不同分区。
如果MySQL服务器充当副本,可以设置系统变量replica_load_tmpdir
,以指定一个单独的目录来保存临时文件,以便复制LOAD DATA
语句。该目录应该位于基于磁盘的文件系统中(而不是基于内存的文件系统),以便临时文件可以在机器重启后继续存在。该目录也不应该是操作系统在启动过程中清除的目录。然而,复制现在可以在重启后继续,如果临时文件已经被删除。
MySQL确保临时文件在mysqld终止时被删除。在支持它的平台上(如Unix),这是在打开文件后unlink文件的结果。这种方法的缺点是文件名不会出现在目录列表中,您也不会看到临时文件占用了文件系统中的大量空间。(在这种情况下,lsof +L1可能有助于识别与mysqld相关的大文件。)
当排序(ORDER BY
或GROUP BY
)时,MySQL通常使用一个或两个临时文件。所需的最大磁盘空间由以下表达式确定:
(length of what is sorted + sizeof(row pointer))
* number of matched rows
* 2
行指针的大小通常是四个字节,但可能会在未来增长,以适应非常大的表。
对于某些语句,MySQL创建临时SQL表,它们的名称以#sql
开头。
某些SELECT
查询创建临时SQL表来保存中间结果。
DDL操作重建表并不是在线使用ALGORITHM=INPLACE
技术的,在同一个目录下创建原始表的临时副本。
在线DDL操作可能使用临时日志文件来记录并发DML操作,临时排序文件来创建索引,和临时中间表文件来重建表。有关更多信息,请参阅第17.12.3节,“在线DDL空间需求”。
InnoDB
用户创建的临时表和磁盘内部临时表创建在MySQL数据目录中的临时表空间文件ibtmp1
中。有关更多信息,请参阅第17.6.3.5节,“临时表空间”。
另请参阅第17.15.7节,“InnoDB INFORMATION_SCHEMA临时表信息表”。
可选的 EXTENDED
修饰符使 显示表
列出由失败的 ALTER TABLE
语句创建的隐藏表。见 第 15.7.7.41 节,“显示表语句”。