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

142

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

yalestar
источник

Ответы:

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можете показать, как будут использоваться значения конфигурации. Это также может быть полезно при определении того, какой файл конфигурации он загружает.

staticsan
источник
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 будет показано в разделе «Состояние сервера»: введите описание изображения здесь

fanThomas
источник
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файлу », который должен иметь переключатель, указывающий, где находится ваш файл конфигурации.

Kershrew
источник
1

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

sudo dtruss mysqld 2>&1 | grep cnf
talsibony
источник
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

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

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

ядро
источник