Search the MySQL manual:
Subscribe to the monthly
MySQL Newsletter!

4.1.2 Файлы параметров `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 не оказывает влияния на просмотр файлов параметров сервером, так как их просмотр происходит до обработки аргументов командной строки).

В Windows считывание принятых по умолчанию параметров MySQL производится из следующих файлов:

Имя файла Назначение
windows-system-directory\my.ini Общие параметры
C:\my.cnf Общие параметры

Обратите внимание на то, что в Windows все пути необходимо указывать при помощи / вместо \. Если необходимо использовать \, то его нужно указать дважды, так как \ является знаком перехода в MySQL.

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

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

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

Файлы параметров могут содержать строки следующего вида:

#comment
Строки комментариев начинаются с символа `#' или `;'. Пустые строки игнорируются.
[group]
группа представляет собой имя программы или группы, для которой необходимо задать параметры. Любые параметры или строки, задающие значения переменных, которые указаны после строки группы, будут относиться к названной группе, пока не закончится файл параметров или же не будет указана другая строка группы.
option
Эквивалент --option в командной строке.
option=value
Эквивалент --option=value в командной строке.
set-variable = variable=value
Эквивалент --set-variable variable=value в командной строке. Данный синтаксис необходимо использовать для задания переменных mysqld. Заметьте, --set-variable не используется с MySQL 4.0. Просто используйте --variable=value.

Группа client обеспечивает возможность задавать параметры, относящиеся ко всем клиентам MySQL (кроме самого mysqld). Эта группа великолепно подходит для указания пароля, используемого при подсоединении к серверу (но при этом следует убедиться, что разрешение на чтение и запись этого файла есть только у вас).

Обратите внимание на то, что для параметров и значений все введенные перед ними и после них пробелы автоматически удаляются. В строках значений можно использовать такие экранирующие секвенции: `\b', `\t', `\n', `\r', `\\' и `\s' (`\s' - это пробел).

Пример типичного глобального файла параметров:

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
set-variable = key_buffer_size=16M
set-variable = max_allowed_packet=1M

[mysqldump]
quick

Пример типичного файла параметров пользователя:

[client]
# Указанный пароль будет направлен всем стандартным клиентам MySQL
password=my_password

[mysql]
no-auto-rehash
set-variable = connect_timeout=2

[mysqlhotcopy]
interactive-timeout

Если у вас дистрибутив исходного кода, то примеры конфигурационных файлов с именами `my-xxxx.cnf' можно найти в каталоге `support-files'. В случае бинарного дистрибутива следует обратиться к каталогу `DIR/support-files', где DIR - имя каталога установки MySQL (обычно `/usr/local/mysql'). На данный момент там приведены примеры файлов конфигурации для малых, средних, больших и очень больших систем. Чтобы поэкспериментировать с файлом, можно скопировать `my-xxxx.cnf' в свой домашний каталог (переименуйте копию в `.my.cnf').

Все поддерживающие файлы параметров клиенты MySQL принимают следующие параметры:

Параметр Описание
--no-defaults Не читать информацию из файлов параметров.
--print-defaults Вывести имя программы и все параметры, которые ей передаются.
--defaults-file=full-path-to-default-file Использовать только указанный файл конфигурации.
--defaults-extra-file=full-path-to-default-file Прочитать этот файл конфигурации после глобального файла конфигурации, но перед файлом конфигурации пользователя.

Обратите внимание на то, что указанные выше параметры должны идти первыми в командной строке! Однако параметр --print-defaults может использоваться сразу после команд --defaults-xxx-file.

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

В скриптах оболочки для анализа файлов config можно использовать команду `my_print_defaults':

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash

Приведенные выше выходные данные содержат все параметры для групп client и mysql.

User Comments

Posted by Simon Green on December 9 2002 1:53am[Delete] [Edit]

my.cnf can now also be in /etc/mysql/my.cnf

Posted by Joel Corra on April 28 2003 1:20pm[Delete] [Edit]

It would be nice to have a complete list (in one place) of ALL options that can be specified for each category. Right now, the options for connecting securely with the mysql client using certicates are found in the section on setting up certificates in Mysql, but not mentioned here in the section on Option files.

Posted by Steven Casey on July 3 2003 5:30pm[Delete] [Edit]

would be nice to include the innodb settings here as well.

Posted by Randy Chrismon on September 12 2003 11:03am[Delete] [Edit]

Amen to the list of options available in my.cnf -- perhaps as an appendix. URL links from the appendix to relevant discussion in the maunaul would also be nice.

For example, I'm trying to determine if I can replace:

mysql --protocol=TCP

with an option in my.cnf

Posted by PJ Kix on September 26 2003 1:50am[Delete] [Edit]

if you want to know what some of the options are for my.cnf or my.ini you can see a list of commands on the command line options page ( http://www.mysql.com/doc/en/Command-line_options.html ). I think most of these apply to the options file as well but are not explained here as well.

Posted by [name withheld] on October 12 2003 2:53am[Delete] [Edit]

Mentioning in this page
"/usr/share/mysql/mysql.server restart" as per
http://www.mysql.com/doc/en/Starting_server.html certainly wouldn't hurt.

Posted by [name withheld] on November 19 2003 6:19pm[Delete] [Edit]

Check out here, too.

http://www.mysql.com/doc/en/SHOW_VARIABLES.html

Posted by Hontvari Jozsef on January 17 2004 7:56pm[Delete] [Edit]

I spent 4 hours to find out why does mysql not read the my.ini file I placed into the windows directory. Well, Windows Server 2003 hides the file extension .cnf even if the "hide file extensions" option is turned off. Unfortunately the example ini files provided by mysql have this extension. So I copied one of the example my.ini files, i.e. "my-medium" (actually my-medium.cnf), then I renamed it to my.ini... but mysql didn't use its content... because its actual name was my.ini.cnf, as it was shown by the dir command.

Posted by Thomas Tran on February 3 2004 1:54am[Delete] [Edit]

Q: All about my.ini.cnf?
A: - Use Textpad to open my.ini.cnf file http://www.textpad.com/
- Revise and uncomment it. EX: basedir = <drive>:/www/mysql/
datadir = <drive>:/www/mysql/data/
- Save as... my.ini
- Done.

Posted by FranГois TURI on March 1 2004 7:35am[Delete] [Edit]

Another Good place to look at is to look at

chapter 5.2.1 mysqld Command-line Options

http://www.mysql.com/doc/en/Server_options.html

Posted by Hugo van der Sanden on March 4 2004 9:59am[Delete] [Edit]

Note that while mysqld supports the new [mysqld-4.1] syntax, the client applications don't. However if you modify the definition of load_default_groups[] in the client applications it appears to do the right thing, eg:
static const char *load_default_groups[]= { "mysql","client",MYSQL_BASE_VERSION,0,0 };

Obviously such a hack isn't appropriate for a production system, but it will make it much easier for me to test 3.23 and 4.1 in parallel, with them running on different ports and using different socket paths.

Add your own comment.