Determine qué archivo de configuración de MySQL se está utilizando


142

¿Existe un comando para determinar qué archivo de configuración está usando MySQL 5.0 actualmente?

Respuestas:


60

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.


9
¿Y cómo hacer eso en un sistema en ejecución sin estropear nada?
Milan Babuškov

55
@ MilanBabuškov Debe ejecutar ps auxfy 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 stopo mysqladmin -u root -p shutdown. Luego, ejecute stracecon el comando mysql que copió. Así se vería así:strace mysqld --basedir=/usr/local/mysql
Hengjie

No tengo la open(...linea. En cambio, tengo 4 líneas que terminan con = -1 Err#2. ¿Cómo sé ahora qué archivo está cargado?
mgPePe

44
fwiiw, en una Mac puedes usar dtruss en lugar de strace: 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ó.
vitaly

268

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

2
¿Y supongo que gana el último archivo de la lista?
mlissner

55
eso es extraño ... Revisé todos y cada uno de ellos y están todos vacíos (en mi Mac) ... ¿alguna idea de por qué?
Abbood

77
Esto no da la configuración cargada. configuraciones personalizadas bastante posibles que podrían cargarse
mgPePe

44
No creo que esto enumere los archivos especificados por !includedir. Estoy tratando de averiguar por qué la !includedirdirectiva en mi /etc/mysql/my.cnfarchivo no funciona.
Buttle Butkus

2
¿Por qué necesitarías llamar mysqldcon la ruta completa?
panepeter

65

Si lo ejecuta mysql --verbose --help | less, le informará sobre la línea 11 qué .cnfarchivos buscará.

También puede hacerlo mysql --print-defaultspara 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.


1
+1 porque esta es la forma recomendada de mysql para hacer esto. Para Windows, una forma simple es volcar la salida en un archivo si desea analizar el contenido.
kta

En Windows, me dijo una lista de ubicaciones pero no la correcta, que en su lugar logré encontrar con mysql workbench ( stackoverflow.com/a/17953456/1504300 ).
realmente agradable

3
No estoy seguro de que deba importar, pero es posible que desee usar en mysqldlugar demysql
nl-x

2
Y aún en Windows, experimento que my.ini se lee desde el directorio ProgramData, y esto no se muestra en la respuesta sugerida aquí.
nl-x

2
Elegido a favor mysqld --print-defaults, me dio exactamente lo que quería cuando busqué en Google esta pregunta.
Por Lundberg

28

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


Esto también funciona para MySQL 5.7. Está C:\ProgramData\MySQL\MySQL Server 5.7\my.inipor defecto.
Ryan Shillington

18

Una alternativa es usar

mysqladmin variables

2
En realidad no dice dónde está el archivo cnf en mis variables. Actualmente estoy ejecutando MySQL 5.5.20. Sin embargo, puedo decir que alguna vez funcionó como lo he visto anteriormente en las variables. Quizás algo cambió desde que se mudó a 5.5.
Hengjie

13

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:

¿Cómo encontrar el archivo de configuración de MySQL?


9

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"


4

Usando MySQL Workbench, se mostrará en "Estado del servidor": ingrese la descripción de la imagen aquí


3

Esto me pareció realmente útil:

  1. Encuentre el proceso MySQL en Servicios en Control Panel -> Administration Tools
  2. Haga clic con el botón derecho y elija Properties
  3. Haga clic y seleccione el Path to executabley vea si contiene la ruta almy.ini/my.cfg

1
Esto funcionó para mí en mi instalación de Server 2008, gracias.
delliottg

2

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

1

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-fileinterruptor que apunte a dónde está su archivo de configuración.


1

En caso de que esté ejecutando mac, esto también se puede lograr mediante:

sudo dtruss mysqld 2>&1 | grep cnf

1

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.

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

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.


Esto es básicamente el equivalente de la respuesta principal, para Windows. gracias.
Aaron Wallentine

0

Instalé mysql use brew install mysql

mysqld --verbose --help | less

Y eso nos muestra:

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.