Визначте, який конфігураційний файл 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
Хенджі

У мене немає open(...лінії. Натомість у мене є 4 рядки, які закінчуються = -1 Err#2. Звідки я тепер знаю, який файл завантажений?
mgPePe

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

268

Взяті з фантастичної книги "Високопродуктивний MySQL" O'Reilly:

$ 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
це дивно .. Я перевірив кожного з них, і всі вони порожні (на моєму комп'ютері). Будь-яка ідея чому?
абат

7
Це не дає завантаженої конфігурації. Досить можливі спеціальні конфігурації, які можуть бути завантажені
mgPePe

4
Я не думаю, що це буде список файлів, визначених користувачем !includedir. Я намагаюся з'ясувати, чому !includedirдиректива в моєму /etc/mysql/my.cnfфайлі не працює.
Buttle Butkus

2
Навіщо вам потрібно дзвонити mysqldповним шляхом ?!
панепетер

65

Якщо ви запустите, mysql --verbose --help | lessвін розповість про рядок 11, які .cnfфайли він шукатиме.

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


1
+1, тому що це рекомендований mysql спосіб це зробити. Для Windows одним простим способом є скидання виводу у файл, якщо ви хочете проаналізувати вміст.
kta

У Windows він повідомив мені перелік локацій, але не правильний, що замість цього мені вдається знайти за допомогою mysql workbench ( stackoverflow.com/a/17953456/1504300 ).
realnice

3
Не впевнений, що це має значення, але ви можете використовувати mysqldзамістьmysql
nl-x

2
І все ж у Windows я відчуваю, що my.ini читається з каталогу ProgramData, і це не відображається у запропонованій тут відповіді.
nl-x

2
Запропонований mysqld --print-defaults, він дав мені саме те, що я хотів, коли я гуглив це питання.
Пер Лундберг

28

Я в Windows, і я встановив останню версію спільноти MySQL 5.6

Що я зробив, щоб побачити, який файл конфігурації використовує, це перейти до Адміністративні інструменти> Послуги> MySQL56> Клацніть правою кнопкою миші> Властивості та перевірити шлях до виконуваного файлу:

"C: / Файли програми / 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 --вербоза небезпечна. Ви можете легко замінити pidfile для запущеного екземпляра! використовуйте його з --pid-file = XYZ

О, і ви не можете реально використовувати його, якщо у вас працює більше ніж 1 екземпляр. Він покаже лише значення за замовчуванням.

Дійсно хороша стаття про це:

Як знайти файл конфігурації MySQL?


9

Щойно зробив швидкий тест на ubuntu:

  • встановлений mysql-сервер, який створив /etc/mysql/my.cnf

  • mysqld - вербоза --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 із службою mysql як сервіс, простий спосіб дізнатися, який конфігураційний файл ви працюєте, - це відкрити панель керування службами, знайти свою службу mysql (у моєму випадку 'MYSQL56'), клацнути правою кнопкою миші та натиснути властивості . Потім ви можете перевірити "Шлях до виконуваного файлу", який повинен мати defaults-fileперемикач, який вказує на те, де знаходиться ваш конфігураційний файл.


1

На всякий випадок, якщо ви запускаєте Mac, цього можна досягти також:

sudo dtruss mysqld 2>&1 | grep cnf

1

Якщо ви перебуваєте в Windows, ви можете використовувати Sysinternals procmon . Відкрийте його та налаштуйте налаштування фільтра так, а потім натисніть «Додати». Тепер procmon буде контролювати mysqld.

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

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

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

Зрозуміло, що mysql шукає по черзі список файлів конфігурації. У моєму випадку він знайшов C:\mysql-5.7.19-winx64\my.cnfуспішно, тому він використовує цей.


Це в основному еквівалент верхньої відповіді для Windows. спасибі.
Аарон Валентин

0

Я встановив mysql використовувати brew install mysql

mysqld --verbose --help | less

І це показує:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.