Ответы:
Если вы работаете в 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, этот вывод скорее всего означает, что ни один из файлов не был найден, поэтому ни один не был открыт.
Взято из фантастической книги О'Рейли «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
!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: / Program Files / 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 --verbose опасно. Вы можете легко переписать pidfile для запуска экземпляра! используйте это с --pid-file = XYZ
О, и вы не сможете использовать его, если у вас запущено более 1 экземпляра. Он покажет вам только значение по умолчанию.
Действительно хорошая статья об этом:
Просто сделал быстрый тест на 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 "Опции по умолчанию"
Я нашел это действительно полезным:
Control Panel -> Administration Tools
Properties
Path to executable
и посмотрите, содержит ли он путь кmy.ini/my.cfg
На некоторых серверах установлено и настроено несколько версий MySQL. Убедитесь, что вы имеете дело с правильной версией, работающей с командой Unix:
ps -ax | grep mysql
Для людей, работающих под управлением Windows Server с MySQL в качестве службы, простой способ выяснить, какой файл конфигурации вы используете, это открыть панель управления службами, найти службу MySQL (в моем случае «MYSQL56»), щелкнуть правой кнопкой мыши и выбрать свойства , Затем отсюда вы можете проверить «Путь к исполняемому defaults-file
файлу », который должен иметь переключатель, указывающий, где находится ваш файл конфигурации.
Если вы используете Windows, вы можете использовать Sysinternals procmon . Откройте его и настройте параметры фильтра следующим образом, затем нажмите «Добавить». Теперь procmon будет контролировать mysqld.
Теперь запустите ваш сервер MySQL как обычно. Procmon будет захватывать фоновые операции mysql. Поиск "мой". в области результатов procmon вы найдете что-то вроде следующего:
Понятно, что mysql ищет список файлов конфигурации по очереди. В моем случае он обнаружен C:\mysql-5.7.19-winx64\my.cnf
успешно, поэтому он использует этот.