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

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

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

Ниже приведен конфиг на котором только что поставленный битрикс на core i5 выдает под 100 попугаев

root@ubuntu:~# cat /etc/mysql/my.cnf
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[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-strict-mode = OFF

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

Также требуется увеличить лимиты на число открытых файлов (иначе table_open_cache может просто не отрабатывать)

mkdir /etc/systemd/system/mysql.service.d/
printf '[Service]\nLimitNOFILE = infinity\nLimitMEMLOCK = infinity\n' >> /etc/systemd/system/mysql.service.d/limits.conf


И перезапустить mysql
systemctl daemon-reload
systemctl restart mysql


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

3 комментария: