Come posso trovare la posizione di MySQL my.cnf


398

Esiste un comando MySQL per localizzare il my.cnffile di configurazione, in modo simile a come PHP lo phpinfo() trova php.ini?


1
su Ubuntu, puoi usare il comando locate my.cnfper trovare dove sono tutti questi nomi di file
evilReiko

Risposte:


571

Non esiste un comando MySQL interno per rintracciarlo, è un po 'troppo astratto. Il file potrebbe trovarsi in 5 (o più?) Posizioni e sarebbero tutti validi perché caricano in cascata.

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $ MYSQL_HOME / my.cnf
  • [Datadir] /my.cnf
  • ~ / .My.cnf

Queste sono le posizioni predefinite che MySQL guarda. Se ne trova più di una, caricherà ognuna di esse e i valori si sovrascriveranno (nell'ordine elencato, credo). Inoltre, il --defaults-fileparametro può sovrascrivere il tutto, quindi ... in pratica, è un enorme dolore nel culo.

Ma grazie alla sua confusione, ci sono buone probabilità che sia solo in /etc/my.cnf.

(se vuoi solo vedere i valori:, SHOW VARIABLESma avrai bisogno delle autorizzazioni per farlo.)


5
Assicurati di riavviare il server MySQL dopo la modifica my.cnf: /etc/init.d/mysqld restart.
Danijel,

4
Per me (AWS EC2 Ubuntu), my.cnfsi trova in /etc/mysql/my.cnf.
SparkAndShine,

58
Corri mysql --helpe vedrai Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
Hanxue il

2
nel mio caso c'era un collegamento simbolico che etc/mysql/my.cnfpuntava a un altro collegamento simbolico a /etc/alternatives/my.cnfcui punta etc/mysql/mysql.cnf.
Martin Schneider,

3
ls /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
Joshua Robinson,

194

Puoi effettivamente "richiedere" MySQL per un elenco di tutte le posizioni in cui cerca my.cnf (o my.ini su Windows). Tuttavia, non è una query SQL. Piuttosto, esegui:

$ mysqladmin --help

o, prima del 5.7:

$ mysqld --help --verbose

Nelle prime righe troverai un messaggio con un elenco di tutte le posizioni my.cnf che cerca. Sulla mia macchina è:

Default options are read from the following files in the given order:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf

Oppure, su Windows:

Default options are read from the following files in the given order:
C:\Windows\my.ini
C:\Windows\my.cnf
C:\my.ini
C:\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf

Si noti, tuttavia, che potrebbe non esserci alcun file my.cnf in nessuna di queste posizioni . Quindi, è possibile creare il file da soli - utilizzare uno dei file di configurazione di esempio forniti con la distribuzione MySQL (su Linux - vedere i /usr/share/mysql/*.cnffile e utilizzare quello che è appropriato per te - copiarlo /etc/my.cnfe quindi modificarlo secondo necessità).

Si noti inoltre che esiste anche un'opzione della riga di comando--defaults-file che può definire il percorso personalizzato per il file my.cnf o my.ini. Ad esempio, questo è il caso di MySQL 5.5 su Windows: punta a un file my.ini nella directory dei dati, che normalmente non è elencato conmysqld --help --verbose . Su Windows: vedi le proprietà del servizio per scoprire se questo è il tuo caso.

Infine, controlla https://dev.mysql.com/doc/refman/8.0/en/option-files.html - è descritto qui in maggiori dettagli.


Sembrava promettente ma sulla mia distro (opencsw.org), non c'è mysqld. Funziona mysqld_safe. "mysqld_safe --verbose --help" non è riconosciuto.
Lawrence I. Siden,

quando l'ho eseguito, ho ottenuto questo: Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf - Mi aspettavo i primi 2 file in ordine inverso.
yitwail,

Le informazioni pubblicate da mysqld --help --verbosecontraddicono quanto dichiarato in dev.mysql.com/doc/refman/5.5/en/option-files.html . Nella mia esperienza "recente fino ad oggi" con la versione 5.6, le informazioni nel sito Web sono le più corrette e pertinenti. La priorità della posizione dei file fornita dal comando help è fuorviante e porterà a risultati negativi.
barista dilettante

Sulla mia vecchia Fedora era mysql --help --verbose
Danny Schoemann il

1
Si noti che ho dovuto aumentare la dimensione del buffer cmd a 3000 per poter effettivamente vedere le prime righe, altrimenti il ​​testo è stato semplicemente sovrascritto. Quando dicono "verbose", a quanto pare, lo intendono.
Wesley Smith,

61

Puoi sempre eseguire find in un terminale.

find / -name my.cnf

1
è difficile :( Esiste un comando mysql come phpinfo () per conoscere la posizione del file di configurazione?
robinmag

find / -name my.cnfè la soluzione migliore, ma puoi anche controllare la tua home directory e /etc/mysql/my.conf Puoi anche vedere se il tuo MYSQL_HOME è impostato digitando echo $MYSQL_HOMEun terminale
Dyllon

11
Wow, ci vorrebbe un'eternità sulla maggior parte delle macchine. La maggior parte dei linux moderni ha installato individuare e fintanto che updateb viene eseguito regolarmente è possibile eseguire: individuare my.cnf | meno
Dark Castle

6
Questo mostra solo quali file sono chiamati my.cnf. Non ti dice quale sul processo mysqld trovato e aperto.
Lawrence I. Siden,

3
Questo non trova ~/.my.cnf- annota il punto iniziale nel nome del file. Anche l'esecuzione di una ricerca sull'intero file system di solito genera scadenze di errori "Autorizzazione negata" a meno che tu non sia root. Quindi dovrebbe essere il comando find find / -name '*my.cnf' 2>/dev/null.
Chris Johnson,

32

Puoi usare :

locate my.cnf
whereis my.cnf
find . -name my.cnf

3
La mia miniera era su /etc/mysql/my.cnf in Ubuntu 12.0.1 su EC2
Maziyar,

1
whereisnon funzionerà qui; cerca le posizioni corrispondenti a un comando e non trova file arbitrari.
Mark Amery,

1
E aggiornatob per aggiornare l'elenco individuare passa attraverso - se my.cnf non è stato indicizzato
WoodyDRN

23

Questo potrebbe funzionare:

strace mysql ";" 2>&1  | grep cnf

sulla mia macchina questo produce:

stat64("/etc/my.cnf", 0xbf9faafc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4271, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3
read(3, "# /etc/mysql/my.cnf: The global "..., 4096) = 4096
stat64("/home/xxxxx/.my.cnf", 0xbf9faafc) = -1 ENOENT (No such file or directory)

Quindi sembra che /etc/mysql/my.cnf sia quello dato che stat64 () e read () hanno avuto successo.


18
mysql --help | grep /my.cnf | xargs ls

ti dirà dove my.cnfsi trova su Mac / Linux

ls: cannot access '/etc/my.cnf': No such file or directory
ls: cannot access '~/.my.cnf': No such file or directory
 /etc/mysql/my.cnf

In questo caso, è dentro /etc/mysql/my.cnf

ls: /etc/my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: ~/.my.cnf: No such file or directory
/usr/local/etc/my.cnf

In questo caso, è dentro /usr/local/etc/my.cnf


Perché questa non è la risposta?
Nikhil Wagh,

13

Per impostazione predefinita, mysql cerca prima my.cnf nella cartella / etc. Se non ci sono file /etc/my.cnf all'interno di questa cartella, ti consiglio di crearne uno nuovo in questa cartella come indicato dalla documentazione ( https://dev.mysql.com/doc/refman/5.6/en/option -files.html ).

Puoi anche cercare my.cnf esistente fornito dalla tua installazione mysql. È possibile avviare il comando seguente

sudo find / -name "*.cnf"

È possibile utilizzare il seguente file di configurazione con la tabella myisam e senza il supporto mysql innodb (dall'installazione della porta di mysql su mac os x maverick). Verifica ogni comando in questo file di configurazione.

# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port        = 3306
socket      = /opt/local/var/run/mysql5/mysqld.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port        = 3306
socket      = /opt/local/var/run/mysql5/mysqld.sock
skip-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id   = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /opt/local/var/db/mysql5
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /opt/local/var/db/mysql5
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 256M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

9

Come notato da Konyak, puoi ottenere l'elenco dei luoghi in cui mysql cercherà il tuo my.cnffile eseguendolo mysqladmin --help. Poiché questo è piuttosto dettagliato, puoi arrivare rapidamente alla parte che ti interessa con:

$ mysqladmin --help | grep -A1 'Default options'

Questo ti darà un output simile a:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

A seconda di come hai installato mysql, è possibile che nessuno di questi file sia ancora presente. Puoi catfarli per vedere come viene costruita la tua configurazione e crearne una tua my.cnfse necessario nella tua posizione preferita.


7

Per Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf


1
Se vuoi cambiare la configurazione di mysql in ubuntu 16.04 Modifica il seguente file For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
Piyush Bansal

6

Non so come hai installato MySQL sul tuo ambiente Linux ma hai controllato?

  • /etc/my.cnf

5

Prova a correre mysqld --help --verbose | grep my.cnf | tr " " "\n"

L'output sarà qualcosa di simile

/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/etc/my.cnf
~/.my.cnf

Questo è l'output che ricevo ma sembra non avere alcuna relazione con l'istanza in esecuzione. Nessuno di questi file esiste.
user3783243

4

Se sei su un Mac con Homebrew, usa

info birra mysql

Vedrai qualcosa del genere

$ brew info mysql
mysql: stable 5.6.13 (bottled)
http://dev.mysql.com/doc/refman/5.6/en/
Conflicts with: mariadb, mysql-cluster, percona-server
/usr/local/Cellar/mysql/5.6.13 (9381 files, 354M) *

L'ultima riga corrisponde ai INSTALLERDIR documenti di MySQL


3

Ho trovato il mio usando

mysqld --help --verbose | grep my.cnf

2

Un'altra opzione è utilizzare il comando whereis.

Ad esempio, dov'è my.cnf


1
Probabilmente staresti meglio con 'individuare' se il sistema lo supporta.
drobert,

2

Risposto solo agli utenti MySQL Workbench,

inserisci qui la descrizione dell'immagine


Viene visualizzato un errore "Posizione del file di configurazione di MySQL (ovvero: my.cnf) non specificato"
Sukesh Kotian,

2

Tutti ottimi suggerimenti, nel mio caso non l'ho trovato in nessuna di quelle posizioni, ma in /usr/share/mysql, ho una VM RHEL e ho installatomysql5.5


2

Dovrai esaminare le varie posizioni in base alla tua versione di MySQL.

mysqld --help -verbose | grep my.cnf

For Homebrew:
/usr/local/Cellar/mysql/8.0.11/bin/mysqld (mysqld 8.0.11)

Default possible locations:
/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf

Found mine here: 
/usr/local/etc/my.cnf

2

Puoi anche eseguire questo comando.

mysql --help | grep cnf


Awsome !, su Windows ho dovuto sostituire grepcon findstr: mysql --help | findstr cnfe lo ha fatto la magia
Laenka-Oss

1

Su Ubuntu (modifica diretta):

$ sudo nano /etc/mysql.conf.d/mysqld.cnf

su Ubuntu 18, questo funziona per me: /etc/mysql/mysql.conf.d/mysqld.cnf
user9869932

0

Ho installato il bundle xampp con apache, php and mysqlin Ubuntu . Il my.cnffile si trova nella /opt/lampp/etc/cartella. Spero che possa aiutare qualcuno.


0

Se si utilizza MAMP, accedere a Modelli> MySQL (my.cnf)> [versione]

Se si esegue MAMP senza finestre, potrebbe essere necessario personalizzare la barra degli strumenti utilizzando il pulsante Personalizza.

Menu Modelli MAMP PRO


0

per me è stato che avevo il tipo di tabelle "ENGINE = MyISAM", una volta cambiato in "ENGINE = InnoDB" ha funzionato :) in PhpMyAdmin nel servizio app di Azure :)


0

Nel caso in cui ti trovi in ​​un VPS e stai provando a modificare un my.cnf su un server già in esecuzione puoi provare:

ps aux | grep mysql

Ti verranno mostrati i parametri in cui è in esecuzione il comando mysql e dove --defaults-filepuntano i punti

Si noti che il server potrebbe essere in esecuzione più di un server MySQL / MariaDB. Se vedi una riga senza --defaults-fileparametro, quell'istanza potrebbe recuperare la configurazione dai .cnf che sono citati mysqladmin --helpcome altri hanno sottolineato.


0

Tenere presente che sebbene mariadDB carichi i dettagli di configurazione dai vari file my.cnf elencati nelle altre risposte qui, può anche caricarli da altri file con nomi diversi.

Ciò significa che se si esegue una modifica in uno dei file my.cnf, potrebbe essere sovrascritto da un altro file con un nome diverso. Per rendere il stick di modifica, è necessario modificarlo nel file di configurazione di destra (ultimo caricato) - o, forse, cambiarlo in tutti.

Quindi, come trovate tutti i file di configurazione che potrebbero essere caricati? Invece di cercare i file my.cnf, prova a eseguire:

grep -r datadir /etc/mysql/

Questo troverà tutti i luoghi in cui è menzionato il datadir. Nel mio caso, produce questa risposta:

/etc/mysql/mariadb.conf.d/50-server.cnf:datadir     = /var/lib/mysql 

Quando modifico quel file (/etc/mysql/mariadb.conf.d/50-server.cnf) per cambiare il valore di datadir, funziona, mentre cambiarlo in my.cnf no. Quindi qualunque opzione tu voglia cambiare, prova a cercarla in questo modo.


0

Dipende dal tuo accesso, ma per me questo lavoro sulla console sql phpmyadmin

MOSTRA VARIABILI;

poi dopo puoi cambiare alcune variabili che puoi fare

SET GLOBAL max_connections = 1000;

o

SET @@ GLOBAL.max_connections = 1000;

prova

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.