Определите, какой файл конфигурации MySQL используется


142

Есть ли команда, чтобы определить, какой файл конфигурации MySQL 5.0 использует в настоящее время?

Ответы:


60

Если вы работаете в Linux, начните mysqld strace, например, с strace ./mysqld.

Среди всех других системных вызовов вы найдете что-то вроде:

stat64("/etc/my.cnf", 0xbfa3d7fc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4227, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3

Итак, как вы можете видеть ... в нем перечислены файлы .cnf, которые он пытается использовать и, наконец, использует.


9
И как это сделать на работающей системе, ничего не испортив?
Милан Бабушков

5
@ MilanBabuškov Вы должны запустить ps auxfи найти команду, выполненную для MySQL. Как правило, это выглядит примерно так: mysqld --basedir=/usr/local/mysql ...(обратите внимание, что ... просто означает, что в команде может быть больше флагов, но я не буду перечислять их все). Как только вы найдете это, скопируйте все это и затем завершите работу MySQL. Если вы на Linux это /etc/init.d/mysqld stopили mysqladmin -u root -p shutdown. Затем запустите straceкоманду mysql, которую вы скопировали. Так это будет выглядеть так:strace mysqld --basedir=/usr/local/mysql
Hengjie

У меня нет open(...линии. Вместо этого у меня есть 4 строки, которые заканчиваются = -1 Err#2. Как вы узнаете, какой файл загружен?
mgPePe

4
fwiiw, на Mac вы можете использовать dtruss вместо strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, этот вывод скорее всего означает, что ни один из файлов не был найден, поэтому ни один не был открыт.
Виталий

268

Взято из фантастической книги О'Рейли «High Performance MySQL»:

$ which mysqld
/usr/sbin/mysqld

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

2
И я предполагаю, что последний файл в списке побеждает?
mlissner

5
это странно .. Я проверил всех и каждого из них, и все они пусты (на моем Mac) .. Есть идеи, почему?
Abbood

7
Это не дает загруженную конфигурацию. довольно возможные пользовательские конфигурации, которые могут быть загружены
mgPePe

4
Я не думаю, что это будет список файлов, указанных !includedir. Я пытаюсь выяснить, почему !includedirдиректива в моем /etc/mysql/my.cnfфайле не работает.
Баттл Буткус

2
Зачем вам нужно звонить mysqldс полным путем ?!
Panepeter

65

Если вы запустите mysql --verbose --help | lessего, он сообщит вам о строке 11, какие .cnfфайлы он будет искать.

Вы также mysql --print-defaultsможете показать, как будут использоваться значения конфигурации. Это также может быть полезно при определении того, какой файл конфигурации он загружает.


1
+1, потому что это рекомендуемый MySQL способ сделать это. Для окон одним простым способом является выгрузка вывода в файл, если вы хотите проанализировать содержимое.
КТА

На окнах он сказал мне список мест, но не правильный, который вместо этого мне удается найти с помощью MySQL Workbench ( stackoverflow.com/a/17953456/1504300 ).
действительно хорошая

3
Не уверен, что это должно иметь значение, но вы можете использовать mysqldвместоmysql
nl-x

2
И все же в Windows я вижу, что my.ini читается из каталога ProgramData, и это не отражено в ответе, предложенном здесь.
NL-X

2
Голосование за mysqld --print-defaults, это дало мне именно то, что я хотел, когда я гуглил этот вопрос.
За Лундберг

28

Я нахожусь на Windows, и я установил самую последнюю версию сообщества MySQL 5.6

Что я сделал, чтобы увидеть, какой файл конфигурации использует, так это перейти в Администрирование> Сервисы> MySQL56> Щелкните правой кнопкой мыши> Свойства и проверьте путь к исполняемому файлу:

"C: / Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56


Это работает и для MySQL 5.7. Это C:\ProgramData\MySQL\MySQL Server 5.7\my.iniпо умолчанию.
Райан Шиллингтон

18

Альтернативой является использование

mysqladmin variables

2
На самом деле он не говорит, где находится файл cnf в моих переменных. В настоящее время я использую MySQL 5.5.20. Тем не менее, я могу сказать, что однажды это сработало, как я видел это ранее в переменных. Возможно, что-то изменилось после перехода на 5.5.
Hengjie

13

mysqld --help --verbose опасно. Вы можете легко переписать pidfile для запуска экземпляра! используйте это с --pid-file = XYZ

О, и вы не сможете использовать его, если у вас запущено более 1 экземпляра. Он покажет вам только значение по умолчанию.

Действительно хорошая статья об этом:

Как найти файл конфигурации MySQL?


9

Просто сделал быстрый тест на Ubuntu:

  • установлен mysql-сервер, на котором создан /etc/mysql/my.cnf

  • mysqld --verbose --help | grep -A 1 "Опции по умолчанию"

110112 13:35:26 [Примечание] Плагин «FEDERATED» отключен.
Параметры по умолчанию читаются из следующих файлов в указанном порядке: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • создал /etc/my.cnf и /usr/etc/my.cnf, каждый с разным номером порта

  • перезапустил mysql - он использовал номер порта, указанный в /usr/etc/my.cnf

Также тем временем нашел опцию --defaults-file для mysqld. Если вы укажете файл конфигурации там, будет использоваться только этот файл, независимо от того, что возвращает / usr / sbin / mysqld --verbose --help | grep -A 1 "Опции по умолчанию"


4

Использование MySQL Workbench будет показано в разделе «Состояние сервера»: введите описание изображения здесь


3

Я нашел это действительно полезным:

  1. Найдите процесс MySQL в Сервисах под Control Panel -> Administration Tools
  2. Щелкните правой кнопкой мыши и выберите Properties
  3. Нажмите и выберите Path to executableи посмотрите, содержит ли он путь кmy.ini/my.cfg

1
Это сработало для меня на моей установке Server 2008, спасибо.
delliottg

2

На некоторых серверах установлено и настроено несколько версий MySQL. Убедитесь, что вы имеете дело с правильной версией, работающей с командой Unix:

ps -ax | grep mysql

1

Для людей, работающих под управлением Windows Server с MySQL в качестве службы, простой способ выяснить, какой файл конфигурации вы используете, это открыть панель управления службами, найти службу MySQL (в моем случае «MYSQL56»), щелкнуть правой кнопкой мыши и выбрать свойства , Затем отсюда вы можете проверить «Путь к исполняемому defaults-fileфайлу », который должен иметь переключатель, указывающий, где находится ваш файл конфигурации.


1

На случай, если вы используете Mac, это также может быть достигнуто:

sudo dtruss mysqld 2>&1 | grep cnf

1

Если вы используете Windows, вы можете использовать Sysinternals procmon . Откройте его и настройте параметры фильтра следующим образом, затем нажмите «Добавить». Теперь procmon будет контролировать mysqld.

введите описание изображения здесь

Теперь запустите ваш сервер MySQL как обычно. Procmon будет захватывать фоновые операции mysql. Поиск "мой". в области результатов procmon вы найдете что-то вроде следующего:

введите описание изображения здесь

Понятно, что mysql ищет список файлов конфигурации по очереди. В моем случае он обнаружен C:\mysql-5.7.19-winx64\my.cnfуспешно, поэтому он использует этот.


Это в основном эквивалент верхнего ответа для окон. Спасибо.
Аарон Уоллентин

0

Я установил MySQL использовать Brew установить MySQL

mysqld --verbose --help | less

И это показывает:

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.