Где находится файл my.cnf
MySQL/MariaDB читает конфигурацию из нескольких мест. Порядок загрузки: /etc/mysql/my.cnf → /etc/mysql/mysql.conf.d/*.cnf → ~/.my.cnf. Для MariaDB основной файл: /etc/mysql/mariadb.conf.d/50-server.cnf.
# Проверить, какие файлы читает MySQL:
mysqld --verbose --help 2>/dev/null | grep "Default options" -A 1Ключевые параметры InnoDB
| Параметр | Рекомендация | Описание |
|---|---|---|
innodb_buffer_pool_size | 60–75% RAM | Главный параметр — буфер данных и индексов InnoDB |
innodb_log_file_size | 256M–1G | Размер лога транзакций (больше = быстрее запись) |
innodb_flush_log_at_trx_commit | 1 (safe) / 2 (fast) | 1 = полная надёжность, 2 = быстрее но риск потери 1 сек |
innodb_flush_method | O_DIRECT | Исключает двойное кэширование с OS |
Оптимальный my.cnf по объёму RAM
Для 2 ГБ RAM:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
max_connections = 100
thread_cache_size = 10
table_open_cache = 2000
tmp_table_size = 64M
max_heap_table_size = 64M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2Для 8 ГБ RAM:
innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
max_connections = 300
tmp_table_size = 128MПроверка использования InnoDB buffer pool
mysql -u root -p -e "
SELECT
FORMAT(@@innodb_buffer_pool_size/1024/1024/1024, 2) AS 'Buffer Pool (GB)',
FORMAT(Innodb_buffer_pool_pages_data * @@innodb_page_size/1024/1024/1024, 2) AS 'Used (GB)'
FROM information_schema.GLOBAL_STATUS
WHERE Variable_name = 'Innodb_buffer_pool_pages_data';"Query Cache (MySQL 5.7 и старше)
В MySQL 8.0 Query Cache удалён. В MySQL 5.7 и MariaDB его использование спорно: при высокой записи он создаёт конкуренцию за блокировки. Для высоконагруженных сайтов рекомендуется Redis/Memcached вместо Query Cache.
Применение настроек
sudo systemctl restart mysql
# или
sudo systemctl restart mariadb
# Проверка
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"Используйте MySQLTuner — скрипт автоматически анализирует ваш сервер и даёт конкретные рекомендации по настройке:
wget http://mysqltuner.pl/ -O mysqltuner.pl && perl mysqltuner.pl