Determina quale file di configurazione MySQL è in uso


142

Esiste un comando per determinare quale file di configurazione MySQL 5.0 sta attualmente utilizzando?

Risposte:


60

Se sei su Linux, avvia 'mysqld' con strace, ad es strace ./mysqld.

Tra tutte le altre chiamate di sistema, troverai qualcosa del tipo:

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

Quindi, come puoi vedere ... elenca i file .cnf, che tenta di utilizzare e infine utilizza.


9
E come farlo su un sistema in esecuzione senza incasinare nulla?
Milano Babuškov,

5
@ MilanBabuškov Dovresti eseguire ps auxfe trovare il comando eseguito per MySQL. In genere sembra qualcosa del tipo mysqld --basedir=/usr/local/mysql ...(nota il ... significa solo che potrebbero esserci più flag nel comando ma non li elencherò tutti) Una volta trovato, copia il tutto e poi spegni MySQL. Se sei su Linux lo è /etc/init.d/mysqld stopo mysqladmin -u root -p shutdown. Quindi esegui stracecon il comando mysql che hai copiato. Quindi sembrerebbe così:strace mysqld --basedir=/usr/local/mysql
Hengjie,

Non ho la open(...linea. Invece ho 4 righe che finiscono con = -1 Err#2. Come faccio a sapere ora quale file viene caricato?
mgPePe

4
A proposito, su un Mac puoi usare dtruss invece di strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, quell'output probabilmente significa che nessuno dei file è stato trovato, quindi nessuno è stato aperto.
vitaly

268

Tratto dal fantastico 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
E presumo che l'ultimo file elencato vinca?
mlissner,

5
è strano .. ho controllato ognuno di quelli e sono tutti vuoti (sul mio mac) .. hai idea del perché?
circa

7
Questo non fornisce la configurazione caricata. piuttosto possibili configurazioni personalizzate che potrebbero essere caricate
mgPePe

4
Non credo che questo elencherà i file specificati da !includedir. Sto cercando di capire perché la !includedirdirettiva nel mio /etc/mysql/my.cnffile non funziona.
Buttle Butkus,

2
Perché dovresti chiamare mysqldcon il percorso completo ?!
Panepeter,

65

Se lo esegui mysql --verbose --help | less, ti dirà sulla linea 11 quali .cnffile cercherà.

Puoi anche fare mysql --print-defaultsper mostrare come verranno utilizzati i valori di configurazione. Questo può anche essere utile per identificare il file di configurazione che sta caricando.


1
+1 perché questo è il modo consigliato da mysql per farlo. Per Windows un modo semplice è scaricare l'output in un file se si desidera analizzare il contenuto.
kta,

Su Windows, mi ha detto un elenco di posizioni, ma non quella giusta, che invece riesco a trovare con mysql workbench ( stackoverflow.com/a/17953456/1504300 ).
reallynice

3
Non sono sicuro che dovrebbe importare, ma potresti voler usare mysqldinvece dimysql
nl-x

2
E ancora in Windows ho esperienza che my.ini viene letto dalla directory ProgramData e questo non viene visualizzato nella risposta suggerita qui.
nl-x

2
Ho votato a favore mysqld --print-defaults, mi ha dato esattamente quello che volevo quando ho cercato su Google questa domanda.
Per Lundberg,

28

Sono su Windows e ho installato la versione più recente di MySQL community 5.6

Quello che ho fatto per vedere quale file di configurazione utilizza è stato andare su Strumenti di amministrazione> Servizi> MySQL56> Clic destro> Proprietà e controllare il percorso dell'eseguibile:

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


Questo funziona anche con MySQL 5.7. È di C:\ProgramData\MySQL\MySQL Server 5.7\my.inidefault.
Ryan Shillington,

18

Un'alternativa è usare

mysqladmin variables

2
In realtà non dice dove si trova il file cnf nelle mie variabili. Attualmente sto eseguendo MySQL 5.5.20. Tuttavia, posso dire che una volta ha funzionato come ho visto in precedenza nelle variabili. Forse qualcosa è cambiato da quando è passato al 5.5.
Hengjie,

13

mysqld --help --verbose è pericoloso. Puoi sovrascrivere facilmente pidfile per eseguire l'istanza! usalo con --pid-file = XYZ

Oh, e non puoi davvero usarlo se hai più di 1 istanza in esecuzione. Ti mostrerà solo il valore predefinito.

Davvero un buon articolo a riguardo:

Come trovare il file di configurazione di MySQL?


9

Ho appena fatto un rapido test su Ubuntu:

  • installato mysql-server, che ha creato /etc/mysql/my.cnf

  • mysqld --verbose --help | grep -A 1 "Opzioni predefinite"

110112 13:35:26 [Nota] Il plug-in 'FEDERATED' è disabilitato.
Le opzioni predefinite vengono lette dai seguenti file nell'ordine indicato: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • creato /etc/my.cnf e /usr/etc/my.cnf, ognuno con un numero di porta diverso

  • riavviato mysql - stava usando il numero di porta impostato in /usr/etc/my.cnf

Nel frattempo ho anche trovato l'opzione --defaults-file su mysqld. Se si specifica un file di configurazione lì, verrà utilizzato solo quello, indipendentemente da ciò che viene restituito da / usr / sbin / mysqld --verbose --help | grep -A 1 "Opzioni predefinite"


4

Utilizzando MySQL Workbench verrà visualizzato in "Stato del server": inserisci qui la descrizione dell'immagine


3

L'ho trovato davvero utile:

  1. Trova il processo MySQL in Servizi sotto Control Panel -> Administration Tools
  2. Fare clic con il tasto destro del mouse e scegliere Properties
  3. Fare clic e selezionare il Path to executablee vedere se contiene il percorso per ilmy.ini/my.cfg

1
Questo ha funzionato per me sulla mia installazione di Server 2008, grazie.
delliottg

2

In alcuni server sono installate e configurate più versioni di MySQL. Assicurati di avere a che fare con la versione corretta in esecuzione con un comando Unix di:

ps -ax | grep mysql

1

Per le persone che eseguono Windows Server con mysql come servizio, un modo semplice per scoprire quale file di configurazione è in esecuzione è quello di aprire il pannello di controllo dei servizi, trovare il servizio mysql (nel mio caso "MYSQL56"), fare clic con il tasto destro e fare clic su Proprietà . Quindi da qui puoi controllare il "Percorso dell'eseguibile" che dovrebbe avere un defaults-fileinterruttore che punta a dove si trova il tuo file di configurazione.


1

Nel caso in cui tu stia eseguendo mac questo può essere ottenuto anche tramite:

sudo dtruss mysqld 2>&1 | grep cnf

1

Se sei su Windows, puoi usare Sysinternals procmon . Aprilo e configura le impostazioni del filtro in questo modo, quindi fai clic su "Aggiungi". Ora procmon controllerà mysqld.

inserisci qui la descrizione dell'immagine

Ora avvia normalmente il tuo server mysql. Procmon acquisirà le operazioni in background di mysql. Cerca "mio". nel riquadro dei risultati procmon e troverai qualcosa di simile al seguente:

inserisci qui la descrizione dell'immagine

È chiaro che mysql cerca a sua volta un elenco di file di configurazione. Nel mio caso ha trovato C:\mysql-5.7.19-winx64\my.cnfcorrettamente, quindi sta usando questo.


Questo è fondamentalmente l'equivalente della risposta principale, per Windows. grazie.
Aaron Wallentine,

0

Ho installato mysql usa brew install mysql

mysqld --verbose --help | less

E mostra:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.