Настройка MySQL 5.7 на Ubuntu 16.04 под Bitrix

Рецепт оптимизации mysql. После этой оптимизации любой сайт работает быстрее.

В MySQL 5.7 по-умолчанию включен innodb_file_per_table=1 и с ним вы нормальных «попугаев» по базе данных не получите.

Поэтому первым делом делаем дамп базы. Выключаем innodb_file_per_table=0 в /etc/mysql/my.cnf. Заливаем обратно базу.

Вот параметры конфигурации которые необходимо изменить

[mysqld]
sql_mode = ""
performance-schema = false
table_open_cache = 1024
thread_cache_size = 4
query_cache_size = 32M
query_cache_type = 1
tmp_table_size = 128M
max_heap_table_size = 128M
innodb_file_per_table = 0
innodb_buffer_pool_size = 1024M
innodb_flush_log_at_trx_commit = 2
innodb_buffer_pool_instances = 2
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED

Больше там практически ничего не надо крутить, что бы ни говорили различные тюнеры — приведет только к потери производительности, можно только увеличивать innodb_buffer_pool_size если база большая и памяти свободной много.

Также требуется увеличить лимиты на число открытых файлов в файле /etc/systemd/system/mysql.service.d/limits.conf, иначе table_open_cache может просто не отрабатывать.

# /etc/systemd/system/mysql.service.d/limits.conf
[Service]
LimitNOFILE = infinity
LimitMEMLOCK = infinity

И перезапустить mysql.

systemctl daemon-reload
systemctl restart mysql

Также в рекомендую менять только

innodb_buffer_pool_size — для InnoDB
key_buffer_size — для MyISAM

Чтобы база входила в оперативную память, но при этом значение это должно быть меньше чем всего ram на сервере
Настройки всего остального в MySQL часто приносят прямо противоположный результат.

Данная статья взята с http://blog.ispsystem.info/2016/10/mysql-57-ubuntu-1604-bitrix.html.

Я сохранил её что бы не потерять.