Risposte:
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.
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
open(...linea. Invece ho 4 righe che finiscono con = -1 Err#2. Come faccio a sapere ora quale file viene caricato?
sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, quell'output probabilmente significa che nessuno dei file è stato trovato, quindi nessuno è stato aperto.
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
!includedir. Sto cercando di capire perché la !includedirdirettiva nel mio /etc/mysql/my.cnffile non funziona.
mysqldcon il percorso completo ?!
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.
mysqldinvece dimysql
mysqld --print-defaults, mi ha dato esattamente quello che volevo quando ho cercato su Google questa domanda.
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
C:\ProgramData\MySQL\MySQL Server 5.7\my.inidefault.
Un'alternativa è usare
mysqladmin variables
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:
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"
L'ho trovato davvero utile:
Control Panel -> Administration ToolsPropertiesPath to executablee vedere se contiene il percorso per ilmy.ini/my.cfgIn 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
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.
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.
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:
È 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.