В этой статье мы собрали базовые конфигурационные параметры, которые нужно обязательно проверить перед запуском сервера с MySQL или MariaDB.
В первую очередь нужно настроить потребление памяти сервисом MySQL/MariaDB. Лучше всего воспользоваться готовым скриптом MySQLTuner (https://github.com/major/MySQLTuner-perl).
В CentOS скрипт можно установить из репозитория:
# yum install mysqltuner
Ubuntu:
$ sudo apt install mysqltuner
Или можете скачать его с git:
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
# chmod +x mysqltuner.pl
Если вы установили пакет через репозиторий, выполните команду:
# msqltuner
Если скрипт скачали вручную:
# perl mysqltuner.pl > settings.txt
Скрипт запросит учетную запись для подключения к базе.
MySQLTuner предложит ряд настроек (пункт Variables to adjust), который нужно внеси в конфигурационный файл MySQL или MariaDB
Рассмотрим какие параметры в конфигурационном файле определяют использование памяти сервером SQL:
Global:
innodb_buffer_pool_size innodb_log_file_size key_buffer_size innodb_log_buffer_size query_cache_size aria_pagecache_buffer_size
Эти значения суммируются.
Thread:
sort_buffer_size join_buffer_size read_buffer_size read_rnd_buffer_size max_allowed_packet thread_stack
Сложите значения этих параметров и умножьте на значение max_connections.
Если вы настроили все значения через mysqltuner, проверьте вручную значения в наиболее критичных параметрах innodb_buffer_pool_size, max_connections.
Обязательно проверьте значение параметра bind-address. Если ваш MySQL не должен принимать внешние подключение, оставьте тут localhost:
bind-address = 127.0.0.1
Проверьте пути к логам. Рекомендую сразу добавить лог для медленных SQL запросов:
log_error = /var/log/mysql/error.log slow_query_log slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2.0
Проверьте кодировку. Для корректной работы с кириллицей, нужно задать:
character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
Следующие два параметра привязаны к максимальному количеству соединений и таблиц в базе данных. Они заметно влияют на производительность MariaDB/MySQL.
open_files_limit table_open_cache
Если при работе вы сталкиваетесь с ошибкой Errcode: 24 «Too many open files», значит количество открытых файлов для процесса mysqld превысило системных лимит. Чтобы увеличить этот лимит, нужно изменить настройки службы. Например:
# mkdir /etc/systemd/system/mysqld.service.d
# touch limit.conf
[Service] LimitNOFILE=65535
Параметр innodb_temp_data_file_path позволяет управлять размером файла с временным табличным пространством. Этот файл может вырасти до огромных размеров и вызывать нехватку свободного места на диске. Ограничьте рост временного файла. Например, чтобы задать максимальный размер 4 Гб и разрешить рост частями по 24 Мб:
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:2G