Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

在 Windows 上,MySQL 检查 TMPDIRTEMPTMP 环境变量的值。对于第一个设置的值,MySQL 使用它,并且不再检查其他的。 如果 TMPDIRTEMPTMP 都未设置,MySQL 使用 Windows 系统默认值,这通常是 C:\windows\temp\

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

--tmpdir 选项可以设置为多个路径,使用圆点符号(:)在 Unix 上和分号符号(;)在 Windows 上分隔路径。

Note

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

如果 MySQL 服务器作为副本运行,您可以设置系统变量 replica_load_tmpdir 指定一个临时文件目录用于复制 LOAD DATA 语句。这目录应该位于磁盘文件系统(而不是内存文件系统)上,以便在机器重启时临时文件仍然存在。该目录也不能是操作系统在启动过程中清除的目录。然而,复制可以在重启后继续进行,如果临时文件已经被删除。

MySQL 确保临时文件在 mysqld 终止时被删除。在支持该功能的平台上(例如 Unix),这通过在打开文件后 unlink 文件来实现。该方法的缺点是文件名不出现在目录列表中,您不能看到临时文件填满临时文件目录所在的文件系统中。在这种情况下,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、临时排序文件来创建索引、临时中间表文件来重建表。更多信息,请见 第17.12.3节,“在线 DDL 空间要求”

InnoDB 用户创建的临时表和磁盘内部临时表将在 MySQL 数据目录中的临时表空间文件 ibtmp1 中创建。更多信息,请见 第17.6.3.5节,“临时表空间”

请见 第17.15.7节,“InnoDB INFORMATION_SCHEMA 临时表信息表”

可选的 EXTENDED 修饰符使 SHOW TABLES 列出由失败的 ALTER TABLE 语句创建的隐藏表。请见 第15.7.7.38节,“SHOW TABLES 语句”