Determine qual arquivo de configuração do MySQL está sendo usado


142

Existe um comando para determinar qual arquivo de configuração o MySQL 5.0 está usando atualmente?

Respostas:


60

Se você estiver no Linux, inicie o 'mysqld' com strace, por exemplo strace ./mysqld.

Entre todas as outras chamadas do sistema, você 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

Então, como você pode ver ... ele lista os arquivos .cnf, que ele tenta usar e finalmente usa.


9
E como fazer isso em um sistema em execução sem estragar nada?
Milan Babuškov

5
@ MilanBabuškov Você deve executar ps auxfe encontrar o comando executado para o MySQL. Normalmente, parece algo como mysqld --basedir=/usr/local/mysql ...(observe o ... apenas significa que pode haver mais sinalizadores no comando, mas eu não vou listar tudo) Depois que você o encontrar, copie a coisa toda e desligue o MySQL. Se você estiver no Linux, é /etc/init.d/mysqld stopou mysqladmin -u root -p shutdown. Em seguida, execute straceo comando mysql que você copiou. Portanto, seria assim: #strace mysqld --basedir=/usr/local/mysql
0000 Hengjie

Eu não tenho a open(...linha. Em vez disso, tenho 4 linhas que terminam com = -1 Err#2. Como você sabe agora qual arquivo está carregado?
mgPePe

4
fwiiw, em um Mac, você pode usar o dtruss em vez do strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, essa saída provavelmente significa que nenhum dos arquivos foi encontrado e nenhum foi aberto.
vitaly

268

Extraído do fantástico livro "High Performance 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
E eu assumo que o último arquivo listado vence?
amigos estão dizendo sobre mlissner

5
isso é estranho .. eu verifiquei cada um deles e eles estão todos vazios (no meu mac) .. alguma idéia do porquê?
Abbood 20/12/2013

7
Isso não fornece a configuração carregada. possíveis configurações personalizadas que podem ser carregadas
mgPePe 17/03

4
Eu não acho que isso irá listar os arquivos especificados por !includedir. Estou tentando descobrir por que a !includedirdiretiva no meu /etc/mysql/my.cnfarquivo não está funcionando.
precisa

2
Por que você precisaria ligar mysqldcom o caminho completo ?!
precisa saber é o seguinte

65

Se você executar, mysql --verbose --help | lessele informará sobre a linha 11 quais .cnfarquivos serão procurados.

Você também pode fazer mysql --print-defaultspara mostrar como os valores de configuração serão usados. Isso também pode ser útil para identificar apenas qual arquivo de configuração está sendo carregado.


1
+1 porque esta é a maneira recomendada pelo mysql de fazer isso. Para o Windows, uma maneira simples é despejar a saída em um arquivo, se você quiser analisar o conteúdo.
Kd

No Windows, ele me informava uma lista de locais, mas não o correto, que eu consegui encontrar com o mysql workbench ( stackoverflow.com/a/17953456/1504300 ).
Realmente #

3
Não tenho certeza se isso deve importar, mas você pode usar em mysqldvez demysql
nl-x

2
E ainda no Windows, percebo que o my.ini é lido no diretório ProgramData, e isso não aparece na resposta sugerida aqui.
Nl-x

2
Voto a favor mysqld --print-defaults, deu-me exatamente o que eu queria quando pesquisei essa pergunta no Google.
Per Lundberg

28

Estou no Windows e instalei a versão mais recente da comunidade MySQL 5.6

O que fiz para ver qual arquivo de configuração usa foi acessar Ferramentas Administrativas> Serviços> MySQL56> Clique com o botão direito do mouse> Propriedades e verifique o caminho do executável:

"C: / Arquivos de programas / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56


Isso funciona para o MySQL 5.7 também. É C:\ProgramData\MySQL\MySQL Server 5.7\my.inipor padrão.
Ryan Shillington

18

Uma alternativa é usar

mysqladmin variables

2
Na verdade, ele não diz onde está o arquivo cnf nas minhas variáveis. Atualmente, estou executando o MySQL 5.5.20. No entanto, posso dizer que, uma vez, isso funcionou como eu já havia visto nas variáveis. Talvez algo tenha mudado desde a mudança para 5.5.
precisa

13

mysqld --help --verbose é perigoso. Você pode sobrescrever facilmente o pidfile para a instância em execução! use-o com --pid-file = XYZ

Ah, e você realmente não pode usá-lo se tiver mais de uma instância em execução. Apenas mostrará o valor padrão.

Artigo muito bom sobre isso:

Como encontrar o arquivo de configuração MySQL?


9

Acabei de fazer um teste rápido no ubuntu:

  • instalou o mysql-server, que criou /etc/mysql/my.cnf

  • mysqld --verbose --help | grep -A 1 "Opções padrão"

110112 13:35:26 [Nota] O plug-in 'FEDERATED' está desativado.
As opções padrão são lidas nos seguintes arquivos na ordem especificada: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • criado /etc/my.cnf e /usr/etc/my.cnf, cada um com um número de porta diferente

  • mysql reiniciado - estava usando o número da porta definido em /usr/etc/my.cnf

Enquanto isso, também encontrei a opção --defaults-file no mysqld. Se você especificar um arquivo de configuração, apenas ele será usado, independentemente do que é retornado por / usr / sbin / mysqld --verbose --help | grep -A 1 "Opções padrão"


4

Usando o MySQL Workbench, será mostrado em "Status do Servidor": insira a descrição da imagem aqui


3

Achei isso realmente útil:

  1. Encontre o processo MySQL em Serviços em Control Panel -> Administration Tools
  2. Clique com o botão direito do mouse e escolha Properties
  3. Clique e selecione oe Path to executableveja se ele contém o caminho para omy.ini/my.cfg

1
Isso funcionou para mim na minha instalação do Server 2008, obrigado.
precisa saber é o seguinte

2

Alguns servidores têm várias versões do MySQL instaladas e configuradas. Verifique se você está lidando com a versão correta executando com um comando Unix de:

ps -ax | grep mysql

1

Para pessoas que executam o servidor windows com o mysql como um serviço, uma maneira fácil de descobrir qual arquivo de configuração você está executando é abrir o painel de controle de serviços, encontrar o serviço mysql (no meu caso 'MYSQL56'), clicar com o botão direito do mouse e clicar em Propriedades. . Então, a partir daqui, você pode verificar o "Caminho para o executável", que deve ter uma defaults-fileopção que aponte para onde está o seu arquivo de configuração.


1

Caso você esteja executando o mac, isso também pode ser alcançado por:

sudo dtruss mysqld 2>&1 | grep cnf

1

Se você estiver no Windows, poderá usar o procmon Sysinternals . Abra-o e defina as configurações de filtro como esta e clique em "Adicionar". Agora procmon irá monitorar o mysqld.

insira a descrição da imagem aqui

Agora inicie seu servidor mysql normalmente. O Procmon irá capturar as operações em segundo plano do mysql. Pesquise "meu". no painel de resultados do procmon e você encontrará algo como o seguinte:

insira a descrição da imagem aqui

É claro que o mysql pesquisa uma lista de arquivos de configuração por sua vez. No meu caso, foi encontrado com C:\mysql-5.7.19-winx64\my.cnfsucesso, por isso está usando este.


Isso é basicamente o equivalente da resposta superior, para janelas. obrigado.
Aaron Wallentine

0

Eu instalei o mysql use brew install mysql

mysqld --verbose --help | less

E isso mostra:

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.