my.cnf примеры конфигурации MySQL, MariaDB

my.cnf является конфигурационным файлом базы данных MySQL и MariaDB.

Для поиска всех возможных расположений файла my.cnf, вместо команды find проще и быстрее использовать предварительно обновленную утилиту locate:

# locate my.cnf
/etc/my.cnf
/etc/my.cnf.d
/etc/mysql/my.cnf

В этом случае слава богу файл my.cnf один на весь сервер, а в действительности их может быть несколько и мало того они могут наследовать другу другу.

Начиная с версии 3.22 MySQL может считывать принятые по умолчанию параметры запуска для сервера и клиентов из файлов параметров. В Unix считывание принятых по умолчанию параметров MySQL производится из следующих файлов:

Имя файлаНазначение
/etc/my.cnfОбщие параметры
DATADIR/my.cnfПараметры для сервера
defaults-extra-fileФайл, указанный при помощи -defaults-extra-file=#
~/.my.cnfПараметры для пользователя

DATADIR является каталогом данных MySQL (обычно '/usr/local/mysql/data' для бинарной установки или '/usr/local/var' для установки из исходных текстов). Обратите внимание, что это тот каталог, который был задан во время настройки, а не указанный при помощи –datadir при запуске mysqld! (–datadir не оказывает влияния на просмотр файлов параметров сервером, так как их просмотр происходит до обработки аргументов командной строки).

MySQL пытается прочитать файлы параметров в указанном выше порядке. Если существует несколько таких файлов, то параметр, указанный в файле, идущем позже, имеет преимущество над таким же параметром, указанным в файле, расположенном ранее. Параметры, указанные в командной строке, обладают более высоким приоритетом по отношению к параметрам, указанным в любом из файлов параметров. Некоторые параметры можно задавать при помощи переменных окружения. Параметры, указанные в командной строке или в файлах параметров, обладают преимуществом по отношению к переменным окружения.

Приводим список программ, поддерживающих файлы параметров: mysql, mysqladmin, mysqld, mysqld_safe, mysql.server, mysqldump, mysqlimport, mysqlshow, mysqlcheck, myisamchk и myisampack.

Любой параметр, который может быть задан в командной строке при запуске программы MySQL, может быть также задан в файле параметров (без предваряющего двойного слэша). Чтобы получить список доступных параметров, следует запустить программу с параметром –help.

Основной источник highload.today

Если в вашем конфигурационном файле есть настройка thread_concurrency — уберите её.

client]
port                    = 3306
socket                  = /var/run/mysqld/mysqld.sock
 
[mysqld_safe]
socket                  = /var/run/mysqld/mysqld.sock
nice                        = 0
 
[mysqld]
user                    = mysql
pid-file                = /var/run/mysqld/mysqld.pid
socket                  = /var/run/mysqld/mysqld.sock
port                    = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
language                = /usr/share/mysql/english
old_passwords           = 0
bind-address                = 127.0.0.1
 
skip-external-locking
 
max_allowed_packet          = 16M
key_buffer_size             = 16M
[p:innodb_buffer_pool_size]     = 512M
[p:innodb_file_per_table]       = 1
[p:innodb_flush_method]         = O_DIRECT
[p:innodb_flush_log_at_trx_commit]  = 0
 
thread_stack                = 128K
[p:thread_cache_size]           = 128
myisam-recover              = BACKUP
max_connections             = 128
table_cache                 = 32
 
query_cache_limit           = 1M
[p:query_cache_size]            = 4M
 
[p:slow_query_log]                = /var/log/mysql/mysql-slow.log
long_query_time             = 1
 
expire_logs_days            = 10
[p:max_binlog_size]             = 100M
 
[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock
 
[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0
 
[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1
 
skip-external-locking
 
max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 1024M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0
 
max_connections             = 136
 
        query_cache_size            = 0
 
slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1
 
expire_logs_days            = 10
max_binlog_size             = 100M
 
[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0

[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1

skip-external-locking

max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 2048M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0

max_connections             = 144

        query_cache_size            = 0

slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1

expire_logs_days            = 10
max_binlog_size             = 100M

[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0

[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1

skip-external-locking

max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 4096M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0

max_connections             = 160

        query_cache_size            = 0

slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1

expire_logs_days            = 10
max_binlog_size             = 100M

[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0

[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1

skip-external-locking

max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 8192M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0

max_connections             = 192

        query_cache_size            = 0

slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1

expire_logs_days            = 10
max_binlog_size             = 100M

[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0

[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1

skip-external-locking

max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 16384M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0

max_connections             = 256

        query_cache_size            = 0

slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1

expire_logs_days            = 10
max_binlog_size             = 100M

[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0

[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1

skip-external-locking

max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 32768M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0

max_connections             = 384

        query_cache_size            = 0

slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1

expire_logs_days            = 10
max_binlog_size             = 100M

[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
[client]
port                        = 3306
socket                      = /var/run/mysqld/mysqld.sock
 
[mysqld_safe]
socket                      = /var/run/mysqld/mysqld.sock
nice                        = 0
 
[mysqld]
user                        = mysql
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/run/mysqld/mysqld.sock
port                        = 3306
basedir                     = /usr
datadir                     = /var/lib/mysql
tmpdir                      = /tmp
language                    = /usr/share/mysql/english
old_passwords               = 0
bind-address                = 127.0.0.1
 
skip-external-locking
 
max_allowed_packet          = 16M
key_buffer_size             = 16M
innodb_buffer_pool_size     = 65536M
innodb_file_per_table       = 1
innodb_flush_method         = O_DIRECT
innodb_flush_log_at_trx_commit  = 0
 
max_connections             = 640
 
        query_cache_size            = 0
 
slow_query_log              = /var/log/mysql/mysql-slow.log
long_query_time             = 1
 
expire_logs_days            = 10
max_binlog_size             = 100M
 
[mysqldump]
quick
quote-names
max_allowed_packet          = 16M
С версии MySQL 5.5.3 рекомендуется использовать кодировку utf8mb4_unicode_ci.
  • Что такое utf8mb4? utf8mb4 - набор символов, используемый для хранения 4 байта в MySQL, внедрён в 2010 году начиная с версии 5.5.3. Главное отличие utf8mb4 от utf8 в том, что utf8mb4 задействует более полные возможности кодировки UTF8, позволяя поддерживать все языки и специальные символы, не поддерживающие utf8 (например японский язык или смайлики из ios - emoji). Однако, как можно догадаться, если utf8mb4 использует для хранения 1 символа 4 байта, то база данных может увеличиться в размере, если сравнивать с точно такой же базой данных в utf8. В наше время немного увеличенный размер базы данных не является существенно проблему, по этому, если вы стоите перед выбором использовать utf8 или utf8mb4 набор символов - используйте utf8mb4.

Некоторые параметры my.cnf в MySQL 5.5.22 устарели (deprecated) и были заменены другими и удалены. Например, изменение кодировки по умолчанию в my.cnf в секции [mysqld] будет выглядит так:

[mysqld]
#...
character_set_server = utf8 # ранее default-character-set = utf8 и character_set_server = utf8
collation-server = utf8_unicode_ci # ранее collation_server = utf8_unicode_ci
collation-server = utf8_unicode_ci или collation-server = utf8_general_ci? utf8_unicode_ci поддерживает expansions в отличии от utf8_general_ci, то есть умеет сопоставлять один символ нескольким (например - в Германии ß = ss ). Подобнее Unicode Character Sets.
Сравнение utf8_unicode_ci _ci без учета регистра, utf8_unicode_bin _bin с учетом регистра.
PQ VPS сервера в 28+ странах.