Где MySQL хранит временные файлы
Переменная окружения TMPDIR содержит полное имя каталога, в котором в MySQL хранит временные файлы. Если TMPDIR не установлена, то MySQL использует каталог, заданный в системе по умолчанию (обычно это '/tmp' или '/usr/tmp'). Если файловая система, в которой находится каталог временных файлов, слишком мала, то следует, отредактировав safe_mysqld , присвоить TMPDIR значение, указывающее на каталог в "более просторной" файловой системе! Временный каталог можно также задавать с помощью опции --tmpdir к mysqld .
Все временные файлы MySQL создает как скрытые; таким образом гарантируется, что временные файлы будут удалены, если mysqld умрет. Недостаток использования скрытых файлов в том, что не будут видны большие временные файлы, забирающие место в файловой системе, где расположен каталог временных файлов.
При сортировке (ORDER BY или GROUP BY ) MySQL обычно использует один или два временных файла. Максимальный размер требующегося для этого пространства на диске составляет:
(размер сортируемых данных + sizeof(указатель базы данных)) * количество совпавших записей * 2
sizeof(указатель базы данных) обычно равен 4, но со временем для очень больших таблиц может увеличиться.
Для некоторых запросов SELECT MySQL также создает временные SQL-таблицы. Они не скрытые и имеют имена вида 'SQL_*'.
ALTER TABLE создает временную таблицу в одном каталоге с исходной таблицей.
Как защитить или изменить сокет-файл MySQL '/tmp/mysql.sock'
Если возникают проблемы с тем, что кто угодно может удалить коммуникационный сокет MySQL '/tmp/mysql.sock', то в большинстве версий Unix можно защитить содержимое '/tmp', установив на каталоге "липучий" (sticky) бит. Войдите в систему как пользователь root и выполните следующую команду:
shell> chmod +t /tmp
Это защитит ваш каталог '/tmp': теперь удалять в нем файлы смогут только их владельцы или суперпользователь (root ).
Проверить, установлен ли "липучий" (sticky) бит, можно, выполнив ls -ld /tmp . Если последним битом прав является t , то бит установлен.
Изменить путь к каталогу, где MySQL открывает сокет-файл, можно, воспользовавшись одним из следующих способов:
Укажите путь в глобальном или локальном файле опций. Например, поместите в '/etc/my.cnf':
[client] socket=path-for-socket-file
[mysqld] socket=path-for-socket-file
См. раздел Файлы параметров 'my.cnf'.
Укажите, где расположен файл, в командной строке safe_mysqld и большинства клиентов с помощью опции --socket=путь-к-файлу-сокета .
Укажите путь к сокету в переменной окружения MYSQL_UNIX_PORT .
Определите путь с помощью опции конфигурирования --with-unix-socket-path=путь-к-файлу-сокета (см. раздел Типичные опции configure ).
Проверить, работает ли сокет, можно следующей командой:
shell> mysqladmin --socket=/path/to/socket version
Проблемы с часовыми поясами
Если есть проблема с тем, что SELECT NOW() возвращает значения GMT, а не местное время, то необходимо установить переменную окружения TZ равной местному часовому поясу. Это должно быть сделано для окружения, в котором работает сервер, например, в safe_mysqld или mysql.server (см. раздел Переменные окружения).
1 2 3
8 8 8
| |