Відповіді:
Якщо ви працюєте в 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, які він намагається використовувати і, нарешті, використовує.
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
. Звідки я тепер знаю, який файл завантажений?
sudo dtruss mysqld 2>&1|grep my.cnf
@mgPePe, такий вихід, ймовірно, означає, що жоден з файлів не був знайдений, тому жоден не був відкритий.
Взяті з фантастичної книги "Високопродуктивний 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
!includedir
. Я намагаюся з'ясувати, чому !includedir
директива в моєму /etc/mysql/my.cnf
файлі не працює.
mysqld
повним шляхом ?!
Якщо ви запустите, mysql --verbose --help | less
він розповість про рядок 11, які .cnf
файли він шукатиме.
Ви також можете зробити, mysql --print-defaults
щоб показати вам, як будуть використовуватися значення конфігурації. Це також може бути корисним для визначення того, який саме конфігураційний файл він завантажує.
mysqld
замістьmysql
mysqld --print-defaults
, він дав мені саме те, що я хотів, коли я гуглив це питання.
Я в 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
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
за замовчуванням.
Альтернативою є використання
mysqladmin variables
mysqld --help --вербоза небезпечна. Ви можете легко замінити pidfile для запущеного екземпляра! використовуйте його з --pid-file = XYZ
О, і ви не можете реально використовувати його, якщо у вас працює більше ніж 1 екземпляр. Він покаже лише значення за замовчуванням.
Дійсно хороша стаття про це:
Щойно зробив швидкий тест на 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 "Параметри за замовчуванням"
Я вважаю це дійсно корисним:
Control Panel -> Administration Tools
Properties
Path to executable
і побачте, чи містить він шлях доmy.ini/my.cfg
На деяких серверах встановлено і налаштовано кілька версій MySQL. Переконайтеся, що ви маєте справу з правильною версією, що працює з командою Unix:
ps -ax | grep mysql
Для людей, на яких працює сервер Windows із службою mysql як сервіс, простий спосіб дізнатися, який конфігураційний файл ви працюєте, - це відкрити панель керування службами, знайти свою службу mysql (у моєму випадку 'MYSQL56'), клацнути правою кнопкою миші та натиснути властивості . Потім ви можете перевірити "Шлях до виконуваного файлу", який повинен мати defaults-file
перемикач, який вказує на те, де знаходиться ваш конфігураційний файл.
Якщо ви перебуваєте в Windows, ви можете використовувати Sysinternals procmon . Відкрийте його та налаштуйте налаштування фільтра так, а потім натисніть «Додати». Тепер procmon буде контролювати mysqld.
Тепер запустіть сервер mysql як звичайний. Procmon буде захоплювати фонові операції mysql. Пошук "мій". на панелі результатів проголосувати, і ви знайдете щось на зразок наступного:
Зрозуміло, що mysql шукає по черзі список файлів конфігурації. У моєму випадку він знайшов C:\mysql-5.7.19-winx64\my.cnf
успішно, тому він використовує цей.