在设置复制的 MySQL 数据库时,我查看了有关 tmpdir 的手册,对这两个变量tmpdir
和有些困惑slave_load_tmpdir
。我知道从属服务器需要在重新启动之间保留一些数据,但我不确定仅设置是否slave_load_tmpdir
足够,或者是否应该将两者都设置为持久目录:
关于tmpdir
,手册上说:
用于临时文件和临时表的目录。 [...]
如果 MySQL 服务器充当复制从服务器,则不应将 tmpdir 设置为指向基于内存的文件系统上的目录或服务器主机重新启动时清除的目录。复制从服务器需要一些临时文件在机器重新启动后继续存在,以便它可以复制临时表或 LOAD DATA INFILE 操作。如果服务器重新启动时临时文件目录中的文件丢失,则复制失败。您可以使用 slave_load_tmpdir 变量设置从服务器的临时目录。在这种情况下,从服务器将不使用通用 tmpdir 值,您可以将 tmpdir 设置为非永久位置。
关于slave_load_tmpdir
,手册上说:
从属服务器创建临时文件的目录名称。默认情况下,此选项等于 tmpdir 系统变量的值。当从属服务器 SQL 线程复制 LOAD DATA INFILE 语句时,它会将要加载的文件从中继日志中提取到临时文件中,然后将其加载到表中。[...]
此选项指定的目录应位于基于磁盘的文件系统中(而不是基于内存的文件系统中),因为用于复制 LOAD DATA INFILE 的临时文件必须在机器重启后保留。该目录也不应是操作系统在系统启动过程中清除的目录。
因此,从属服务器需要一个持久临时目录来“复制临时表或 LOAD DATA INFILE 操作”,但slave_load_tmpdir
只提到 LOAD DATA INFILE(也反映在其名称中)。另一方面,手册指出,如果slave_load_tmpdir
是持久的,tmpdir
则可以位于非永久位置。有人对此有任何见解吗?