PQR
@PQR

Не пишется slow_query_log_file (MariaDB), провёл исследование, не докопался, поможете?

Имею ubuntu 14.04 и MariaDB 10.0.30.

В файле /etc/mysql/my.cnf настроил:

slow_query_log=1
slow_query_log_file     = /var/log/mysql/mariadb-slow.log
long_query_time = 10
#log_slow_rate_limit    = 1000
log_slow_verbosity      = query_plan


Сервер работает уже давно, но файла /var/log/mysql/mariadb-slow.log по факту нет - может у меня нет медленных запросов?

Узнал на днях, что MySQL внутри имеет счётчик медленных запросов, который можно посмотреть командой SHOW GLOBAL STATUS;
Вижу: Slow_queries 8878
Где все эти 8878 запросов? Почему нет лога?

На всякий случай решил проверить, применились ли настройки из my.cnf к серверу? Сделал запрос
show variables like '%slow%';
и внезапно вижу:
slow_query_log_file = master-slow.log
это совсем не то, что я настраивал! Почему?

Но и этого файла master-slow.log нет в папке /var/log/mysql/, может надо в какой-то другой папке искать?

В этой статье https://mariadb.com/kb/en/mariadb/slow-query-log-o... прочитал про переменную log_output, которую нужно установить в значение "file", проверил с помощью запроса SHOW VARIABLES LIKE '%log_output%'; - тут у меня всё верно log_output=FILE

Наконец, в той же статье указана настройка log_queries_not_using_indexes и в моём случае стоит OFF - видимо поэтому в логе ничего нет, т.к. все мои медленные запросы это именно запросы не использующие индексы? (upd: это не так, читай дальше) Установил в ON командой set global log_queries_not_using_indexes = 'ON', подождал, счётчик медленных запросов который я смотрю через SHOW GLOBAL STATUS; увеличился, но файлов master-slow.log и /var/log/mysql/mariadb-slow.log всё ещё нет!

Я запутался, куда копать дальше? Самый главный вопрос сейчас: почему в my.cnf я явно указал slow_query_log_file = /var/log/mysql/mariadb-slow.log, а запрос show variables like '%slow_query_log_file%'; показывает совсем другоезначение "master-slow.log"?

UPD спустя несколько дней
Спасибо за комментарии и подсказки ниже, провёл ряд дополнительных исследований:
0) выполнил команду на работающем сервере
set global slow_query_log_file = /var/log/mysql/mariadb-slow.log
и файл таки появился! Это сняло подозрения, что была проблема доступа к папке /var/log/mysql/. Но пока остался вопрос почему при старте сервера это же значение не берётся из my.cnf
1) внизу my.cnf есть строка !includedir /etc/mysql/conf.d/, я посмотрел что в папке /etc/mysql/conf.d/ - там три файла mariadb.cnf mysqld_safe_syslog.cnf tokudb.cnf, но внутри нет никаких затирающих настроек связанных с медленными запросами
2) моё предположение относительно log_queries_not_using_indexes, которое я написал выше оказалось не верно, проясняю ситуацию, чтобы другие не запутались прочитав этот эпос:
- медленные запросы записываются в лог вне зависимости от значения log_queries_not_using_indexes
- если включить log_queries_not_using_indexes=On, то в дополнение к медленным запросом в тот же лог файл будут записываться все запросы не использующие индексы (вне зависимости от времени их выполнения)
  • Вопрос задан
  • 1986 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ratmanovsky
Для тех, кто столкнулся с той же проблемой и нашел этот топик в 2021 году.
В конфигурационном файле необходимо указать опцию БЕЗ "= 1":

slow_query_log

https://mariadb.com/kb/en/slow-query-log-overview/

Путь конфига для ОС Debian 10, MariaDB 10.3.27
/etc/mysql/mariadb.conf.d/50-server.cnf

Блок [mysqld]
Ответ написан
Комментировать
@Swartalf
1. При изменении конфига нужно делать релоад/рестарт mysql.
2. Через поиск найдите файл куда сейчас пишуться логи find / -name 'master-slow.log'
3. Проверьте директорию где должны находиться логи на наличие прав записи для пользователя Mysql.
4. my.cnf может находиться не только в /etc/mysql, посмотрите может есть конфиг перетирающий ваши настройки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы