B.4.3.5 MySQL 在哪里存储临时文件

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

在 Windows 上,MySQL 按 Sequences 检查TMPDIRTEMPTMP环境变量的值。对于发现的第一个设置,MySQL 使用它,而不检查剩余的那些。如果未设置TMPDIRTEMPTMP,则 MySQL 使用 Windows 系统默认值,通常是C:\windows\temp\

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

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

Note

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

如果 MySQL 服务器充当副本,则可以设置slave_load_tmpdir系统变量以指定用于复制LOAD DATA语句时保存临时文件的单独目录。该目录应该位于基于磁盘的文件系统中(而不是基于内存的文件系统中),以便用于复制 LOAD DATA 的临时文件可以在计算机重新启动后幸免。该目录也不应是 os 在系统启动过程中清除的目录。但是,如果已删除临时文件,则复制现在可以在重新启动后 continue。

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

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

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

行指针大小通常为四个字节,但是将来对于非常大的 table 可能会增加。

对于某些语句,MySQL 创建临时 SQLtable,这些 table 未隐藏并且其名称以#sql开头。

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

重建 table 且未使用ALGORITHM=INPLACE技术在线执行的 DDL 操作将在与原始 table 相同的目录中创建原始 table 的临时副本。

在线 DDL 操作可以使用临时日志文件记录并发 DML,创建索引时使用临时排序文件以及在重建 table 时使用临时中间 table 文件。有关更多信息,请参见第 14.13.3 节“在线 DDL 空间要求”

在 MySQL 数据目录中名为ibtmp1的临时 table 空间文件中创建了InnoDB个非压缩的,用户创建的临时 table 和磁盘上的内部临时 table。有关更多信息,请参见第 14.6.3.5 节“临时 table 空间”

另请参见第 14.16.7 节“ InnoDB INFORMATION_SCHEMA 临时 table 信息 table”孤儿临时桌子