Почему мой mysql slow_query_log пуст?

У меня есть следующие настройки на производственном компьютере:
MySQL сервер 5.5.19
активный (проверил строку ps) my.cnf содержит:

slow_query_log
slow_query_log_file =/opt/app/mysql/log/mysqld-slow.log
long_query_time     = 1
general_log         = OFF
general_log_file    =/opt/app/mysql/log/mysqld.log
log-queries-not-using-indexes

mysql> ПОКАЗАТЬ ПЕРЕМЕННЫЕ НРАВИТСЯ "log%"; -> показывает "log_queries_not_using_indexes=ON" и "log_slow_queries=ON"

Файл /opt/app/mysql/log/mysqld-slow.log существует, принадлежит mysql и имеет нулевую длину.

Проблема в том, что на тестовой машине мы заполняли журнал запросов очень быстро из-за опции log-query-not-using-indexes. Мы отключили его, потому что оно все равно было нужно. Теперь мы просто начали работать с нашей производственной базой данных и хотели, чтобы с нами не произошло ничего подобного, и нашли ту же настройку, но журнал пуст. Мы не можем просто перезапустить mysqld и поиграть, потому что мы сейчас живы. Я просто хочу понять, почему журнал пуст, хотя конфиг, кажется, указывает, что он должен регистрировать лоты запросов. Общее выполнение приложения на рабочих и тестовых серверах идентично, поэтому очень маловероятно, что не будет никаких неиндексированных запросов.

Итак, вопрос: какую другую конфигурацию я могу проверить, чтобы понять, почему ничего не регистрируется? Я не хочу, чтобы он регистрировался, я просто хочу быть уверенным, что он не запустится внезапно, как сумасшедший, если по какой-то причине сервер БД будет перезапущен. Я знаю, что мог бы добиться этого, просто удалив опцию из my.cnf, но я также хотел бы понять, почему сейчас она не регистрируется.

Спасибо Итан

2 ответа

Возможно, у вас просто нет запросов длительностью более 1 секунды.

Вы можете выполнить запрос как SELECT SLEEP(10), так что это будет обязательно дольше, чем long_query_time и будет зарегистрирован.

Также возможно, что запросы записываются в файл, но у вас есть старый файл журнала. Таким образом, сервер все еще выполняет запись в диссоциированный дескриптор файла. Вы можете подтвердить это с помощью lsof,

Вы можете принудительно закрыть сервер и снова открыть файл журнала, не требуя перезапуска mysqld. Это оставит диссоциированный файл. Вы можете сделать это одним из двух способов: FLUSH LOGS или установить глобальную переменную slow_query_log=0 затем slow_query_log=1,

В версии MySQL 5.0 произошли некоторые серьезные изменения в производительности журналов.

Ведение журнала контролируется переменной log-output. Знать NONE означает отсутствие регистрации в целом. Вы можете проверить значение этой переменной следующим образом:

mysql> SHOW VARIABLES LIKE "log_output";

В вашем случае вам нужна медленная регистрация в файле, поэтому вы можете сделать что-то вроде:

mysql> SET GLOBAL log_output=FILE;
mysql> SET GLOBAL slow_query_log=ON;
Другие вопросы по тегам