Respuestas:
Si está en Linux, inicie el 'mysqld' con strace
, por ejemplo strace ./mysqld
.
Entre todas las demás llamadas al sistema, encontrará algo como:
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
Entonces, como puede ver ... enumera los archivos .cnf que intenta usar y finalmente usa.
ps auxf
y encontrar el comando ejecutado para MySQL. Por lo general, parece algo como mysqld --basedir=/usr/local/mysql ...
(tenga en cuenta que ... solo significa que puede haber más indicadores en el comando, pero no lo enumeraré todo) Una vez que lo haya encontrado, copie todo y luego cierre MySQL. Si estás en Linux es /etc/init.d/mysqld stop
o mysqladmin -u root -p shutdown
. Luego, ejecute strace
con el comando mysql que copió. Así se vería así:strace mysqld --basedir=/usr/local/mysql
open(...
linea. En cambio, tengo 4 líneas que terminan con = -1 Err#2
. ¿Cómo sé ahora qué archivo está cargado?
sudo dtruss mysqld 2>&1|grep my.cnf
@mgPePe, esa salida probablemente significa que no se encontró ninguno de los archivos, por lo que ninguno se abrió.
Tomado del fantástico libro O'Reilly "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
. Estoy tratando de averiguar por qué la !includedir
directiva en mi /etc/mysql/my.cnf
archivo no funciona.
mysqld
con la ruta completa?
Si lo ejecuta mysql --verbose --help | less
, le informará sobre la línea 11 qué .cnf
archivos buscará.
También puede hacerlo mysql --print-defaults
para mostrarle cómo usará los valores de configuración. Esto también puede ser útil para identificar qué archivo de configuración se está cargando.
mysqld
lugar demysql
mysqld --print-defaults
, me dio exactamente lo que quería cuando busqué en Google esta pregunta.
Estoy en Windows y he instalado la versión más reciente de MySQL community 5.6
Lo que hice para ver qué archivo de configuración usa fue ir a Herramientas administrativas> Servicios> MySQL56> Haga clic derecho> Propiedades y verifique la ruta al ejecutable:
"C: / Archivos de programa / 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
por defecto.
Una alternativa es usar
mysqladmin variables
mysqld --help --verbose es peligroso. ¡Puede sobrescribir fácilmente el archivo pid para ejecutar la instancia! úsalo con --pid-file = XYZ
Ah, y realmente no puedes usarlo si tienes más de 1 instancia ejecutándose. Solo le mostrará el valor predeterminado.
Muy buen artículo al respecto:
Acabo de hacer una prueba rápida en ubuntu:
instaló mysql-server, que creó /etc/mysql/my.cnf
mysqld --verbose --help | grep -A 1 "Opciones predeterminadas"
110112 13:35:26 [Nota] El complemento 'FEDERADO' está deshabilitado.
Las opciones predeterminadas se leen de los siguientes archivos en el orden dado: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf
creado /etc/my.cnf y /usr/etc/my.cnf, cada uno con un número de puerto diferente
reinició mysql: estaba usando el número de puerto establecido en /usr/etc/my.cnf
Mientras tanto, también encontré la opción --defaults-file para mysqld. Si especifica un archivo de configuración allí, solo se usará ese, independientemente de lo que devuelva / usr / sbin / mysqld --verbose --help | grep -A 1 "Opciones predeterminadas"
Esto me pareció realmente útil:
Control Panel -> Administration Tools
Properties
Path to executable
y vea si contiene la ruta almy.ini/my.cfg
Algunos servidores tienen múltiples versiones de MySQL instaladas y configuradas. Asegúrese de estar tratando con la versión correcta que se ejecuta con un comando Unix de:
ps -ax | grep mysql
Para las personas que ejecutan Windows Server con mysql como servicio, una manera fácil de averiguar qué archivo de configuración está ejecutando es abrir el panel de control de servicios, encontrar su servicio mysql (en mi caso, 'MYSQL56'), hacer clic derecho y hacer clic en propiedades . Luego, desde aquí, puede verificar la "Ruta al ejecutable", que debe tener un defaults-file
interruptor que apunte a dónde está su archivo de configuración.
Si está en Windows, puede usar Sysinternals procmon . Ábralo y configure el filtro de esta manera, luego haga clic en "Agregar". Ahora procmon monitoreará mysqld.
Ahora inicie su servidor mysql como de costumbre. Procmon capturará las operaciones en segundo plano de mysql. Busca "mi". en el panel de resultados procmon y encontrarás algo como lo siguiente:
Está claro que mysql busca una lista de archivos de configuración a su vez. En mi caso, se encontró con C:\mysql-5.7.19-winx64\my.cnf
éxito, así que está usando este.