Fix: cacheEngine=none in MySQL/MariaDB
Что означает cacheEngine=none?
Ошибка cacheEngine=none обычно появляется в логах MySQL/MariaDB или отчетах о производительности запросов, указывая на то, что кэширование запросов отключено.
Причины, по которым вы можете это увидеть:
- Кэш запросов отключен (
query_cache_type = OFF или query_cache_size = 0).
- В MariaDB 10.1+ кэширование запросов удалено (устарело из-за неэффективности производительности).
- Приложение пытается использовать механизм кэширования, который не существует.
Проверить, включен ли кэш запросов
Выполните следующую команду в MySQL/MariaDB:
SHOW VARIABLES LIKE 'query_cache%';
Ожидаемый вывод (если кэш запросов отключен):
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 0 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+-------+
Если query_cache_size = 0 и query_cache_type = OFF, MySQL/MariaDB работает без кэша запросов.
Включить кэш запросов (если нужно)
Внимание: Если ваше приложение требует кэширования запросов, вы можете включить его вручную (только для MySQL 5.7 или старше, поскольку в MariaDB 10.1+ он удален).
Отредактируйте файл конфигурации MySQL/MariaDB
sudo nano /etc/mysql/my.cnf # Для Debian/Ubuntu
sudo nano /etc/my.cnf # Для CentOS/RHEL
Добавьте или измените эти строки в разделе [mysqld]
[mysqld]
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
Объяснение:
query_cache_type = 1 > Включает кэш запросов.
query_cache_size = 64M > Выделяет 64 МБ кэша.
query_cache_limit = 2M > Кэширует запросы размером до 2 МБ.
Перезапустите MySQL/MariaDB
sudo systemctl restart mysql # Debian/Ubuntu
sudo systemctl restart mariadb # CentOS/RHEL
Теперь кэширование запросов должно быть включено.
Проверить, включен ли кэш запросов
Выполните:
SHOW VARIABLES LIKE 'query_cache%';
Ожидаемый вывод
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| query_cache_size | 67108864 |
| query_cache_type | ON |
| query_cache_limit | 2097152 |
+------------------------------+---------+
Если query_cache_type = ON, кэширование включено.
Альтернативные методы кэширования (для MariaDB 10.1+ и MySQL 8.0+)
Поскольку кэш запросов устарел, рекомендуется использовать другие механизмы кэширования.
Использовать буферный пул InnoDB для кэширования
Вместо кэша запросов оптимизируйте буферный пул InnoDB:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 2
Это кэширует часто используемые данные в оперативной памяти.
Включить кэш запросов в ProxySQL
Если вы используете MariaDB 10.1+ или MySQL 8.0, рассмотрите возможность использования ProxySQL для кэширования.
Установить ProxySQL:
sudo apt install proxysql -y # Debian/Ubuntu
sudo yum install proxysql -y # CentOS/RHEL
Включить кэш запросов:
UPDATE mysql_query_rules SET cache_ttl = 1000 WHERE rule_id = 1;
SAVE MYSQL QUERY RULES;
Это включает кэширование запросов через ProxySQL.
Проверить, использует ли ваше приложение кэш запросов
Если cacheEngine=none все еще появляется:
- Проверьте файл конфигурации базы данных вашего приложения (например,
wp-config.php, config.php).
- Убедитесь, что оно не принудительно включает кэширование запросов в неподдерживаемой версии MariaDB.
Сводка
| Задача |
Команда/Решение |
| Проверить, включен ли кэш запросов |
SHOW VARIABLES LIKE 'query_cache%'; |
| Включить кэш запросов (MySQL <5.7) |
Изменить my.cnf, установить query_cache_size = 64M |
| Перезапустить MySQL/MariaDB |
sudo systemctl restart mysql |
| Использовать альтернативное кэширование (MariaDB 10.1+ и MySQL 8.0+) |
Включить буферный пул InnoDB или кэширование ProxySQL |
Теперь кэширование вашей базы данных должно быть оптимизировано!
High-Availability Cloud VDS
- Uptime Р 99.95%
- Network bandwidth Р 1 Gb/s
- Technical support 24/7/365
learn more...