Пропустить навигацию.

Кеширование запросов mysql, конфиг my.cnf, права доступа

Описание проблемы

Столкнулся с такой проблемой, что не работает кэширование mysql запросов.

В файле настроек /etc/my.cnf:
query_cache_size = 128M

Перезапускаю mysql, рефрешу страницу сайта, смотрю
mysql -uroot -ppassword
mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';

и вижу одни нули. Значит кэш запросов mysql не работает.

Выполняю в mysql:
set @@global.query_cache_size=64*1024*1024;

Рефрешу страницу сайта и вижу что цифры поползли и кэш работает. В частности один тяжёлый запрос выполняется не 0.5 секунды, а 0.001 секунды.

Решение проблемы

А проблема оказалось в простом, права доступа на my.cnf были 777.

После установки 444 кеширование mysql заработало корректно.

Контекст

К стандартному конфигу /etc/my.cnf было добавлено три строки:
query_cache_limit= 6M # максимальный размер ответа запроса, который кэшируется
query_cache_size = 128M # максимальный размер кеша
query_cache_type=1 # 1 = on, кэш включен

Не забывайте что кэш mysql храниться в оперативной памяти, по этому подбирайте оптимальное значение query_cache_size исходя из своей ситуации. Я рекомендую ставить значение равное 20-30% от реального размера оперативной памяти на вашем сервере/VDS.