Como encontro a localização do MySQL my.cnf

398

Existe um comando MySQL para localizar o my.cnfarquivo de configuração, semelhante à maneira como o PHP phpinfo() localiza php.ini?

robinmag
fonte
11
no ubuntu, você pode usar o comando locate my.cnfpara descobrir onde estão todos esses nomes de arquivos
evilReiko

Respostas:

571

Não há nenhum comando interno do MySQL para rastrear isso, é um pouco abstrato demais. O arquivo pode estar em 5 (ou mais?) Locais e todos eles são válidos porque carregam em cascata.

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

Esses são os locais padrão que o MySQL analisa. Se encontrar mais de um, ele carregará cada um deles e os valores se substituirão (na ordem listada, eu acho). Além disso, o --defaults-fileparâmetro pode substituir a coisa toda, então ... basicamente, é uma enorme dor no traseiro.

Mas, graças ao fato de ser tão confuso, há uma boa chance de estar no /etc/my.cnf.

(se você quiser apenas ver os valores:, SHOW VARIABLESmas precisará das permissões para fazer isso.)

tadamson
fonte
5
Certifique-se de reiniciar o servidor MySQL após a edição my.cnf: /etc/init.d/mysqld restart.
Danijel
4
For me (AWS EC2 Ubuntu), my.cnfestá localizado em /etc/mysql/my.cnf.
SparkAndShine
58
Corra mysql --helpe você verá 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
2
no meu caso, havia um link simbólico etc/mysql/my.cnfapontando para outro link simbólico /etc/alternatives/my.cnfque aponta para 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

Você pode realmente "solicitar" ao MySQL uma lista de todos os locais onde ele procura por my.cnf (ou my.ini no Windows). Porém, não é uma consulta SQL. Em vez disso, execute:

$ mysqladmin --help

ou anterior 5.7:

$ mysqld --help --verbose

Nas primeiras linhas, você encontrará uma mensagem com uma lista de todos os locais my.cnf que ele procura. Na minha máquina é:

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

Ou, no 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

Observe, no entanto, que pode ser que não exista arquivo my.cnf em nenhum desses locais . Portanto, você pode criar o arquivo por conta própria - use um dos arquivos de configuração de amostra fornecidos com a distribuição MySQL (no Linux - veja os /usr/share/mysql/*.cnfarquivos e use o que for apropriado para você - copie-o /etc/my.cnfe modifique-o conforme necessário).

Além disso, observe que também há uma opção de linha de comando--defaults-file que pode definir o caminho personalizado para o arquivo my.cnf ou my.ini. Por exemplo, este é o caso do MySQL 5.5 no Windows - aponta para um arquivo my.ini no diretório de dados, que normalmente não está listado mysqld --help --verbose. No Windows - consulte as propriedades do serviço para descobrir se esse é o seu caso.

Por fim, verifique o https://dev.mysql.com/doc/refman/8.0/en/option-files.html - ele é descrito lá em mais detalhes.

Timur
fonte
Parecia promissor, mas na minha distribuição (opencsw.org), não existe o mysqld. Ele roda mysqld_safe. "mysqld_safe --verbose --help" não é reconhecido.
Lawrence I. Siden 28/03/12
quando o executei, obtive o seguinte: Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf - esperava os 2 primeiros arquivos na ordem inversa.
yitwail
As informações postadas por mysqld --help --verbosecontradizem o que está indicado em dev.mysql.com/doc/refman/5.5/en/option-files.html . Na minha experiência "recente até hoje" com a versão 5.6, as informações no site são as mais corretas e relevantes. A prioridade do local dos arquivos fornecida pelo comando help é enganosa e levará a resultados negativos.
amateur barista
No meu antigo Fedora foi mysql --help --verbose
Danny Schoemann
11
Observe que eu tive que aumentar o tamanho do buffer do cmd para 3000 para poder realmente ver as primeiras linhas; caso contrário, o texto foi simplesmente substituído. Quando eles dizem "verboso", aparentemente, eles querem dizer isso.
Wesley Smith #
61

Você sempre pode executar o find em um terminal.

find / -name my.cnf
Dyllon
fonte
11
É a maneira mais difícil :( Existe algum comando mysql como o phpinfo () para saber o local do arquivo de configuração?
robinmag
find / -name my.cnfé a sua melhor aposta, mas você também pode verificar o seu diretório home e /etc/mysql/my.conf Você também pode ver se o seu MYSQL_HOME é definido digitando echo $MYSQL_HOMEem um terminal
Dyllon
11
Uau, isso levaria uma eternidade na maioria das máquinas. A maioria dos linuxes modernos tem o install instalado e, desde que o updatedb seja executado regularmente, você pode: a: localizar my.cnf | menos
Dark Castle
6
Isso mostra apenas quais arquivos são nomeados my.cnf. Ele não diz qual no processo mysqld encontrado e aberto.
Lawrence I. Siden 28/03/12
3
Isso não foi encontrado ~/.my.cnf- observe o ponto inicial no nome do arquivo. A execução de uma descoberta em todo o sistema de arquivos geralmente gera dezenas de erros de "Permissão negada", a menos que você seja root. Portanto, o comando find deve ser find / -name '*my.cnf' 2>/dev/null.
Chris Johnson
32

Você pode usar :

locate my.cnf
whereis my.cnf
find . -name my.cnf
Satish Sharma
fonte
3
A grande mina estava em /etc/mysql/my.cnf no Ubuntu 12.0.1 no EC2
Maziyar
11
whereisnão vai funcionar aqui; ele procura os locais correspondentes a um comando e não consegue encontrar arquivos arbitrários.
Mark Amery
11
E updatedb para atualizar a lista localizar atravessa - se my.cnf não foi indexado
WoodyDRN
23

Isso pode funcionar:

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

na minha máquina isso gera:

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)

Portanto, parece que /etc/mysql/my.cnf é o único desde que stat64 () e read () foram bem-sucedidos.

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

dirá onde my.cnfestá localizado no 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

Nesse caso, está em /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

Nesse caso, está em /usr/local/etc/my.cnf

kimbaudi
fonte
Por que essa não é a resposta?
Nikhil Wagh 24/10/19
13

Por padrão, o mysql pesquisa my.cnf primeiro na pasta / etc. Se não houver arquivo /etc/my.cnf dentro desta pasta, recomendamos que você crie um novo nesta pasta, conforme indicado na documentação ( https://dev.mysql.com/doc/refman/5.6/en/option -files.html ).

Você também pode procurar o my.cnf existente fornecido pela sua instalação do mysql. Você pode iniciar o seguinte comando

sudo find / -name "*.cnf"

Você pode usar o seguinte arquivo de configuração com a tabela myisam e sem o suporte ao innodb mysql (da instalação da porta do mysql no mac os x maverick). Por favor, verifique cada comando neste arquivo de configuração.

# 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
Ranaivo
fonte
9

Conforme observado pelo konyak, você pode obter a lista de locais que o mysql procurará pelo seu my.cnfarquivo executando mysqladmin --help. Como isso é bastante detalhado, você pode chegar rapidamente à parte da sua preferência:

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

Isso fornecerá uma saída semelhante 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

Dependendo de como você instalou o mysql, é possível que nenhum desses arquivos esteja presente ainda. Você pode catusá-los para ver como sua configuração está sendo criada e criar sua própria, my.cnfse necessário, no local preferido.

Matt Sanders
fonte
7

Para o Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf

Smith
fonte
11
Se você deseja alterar a configuração do mysql no ubuntu 16.04 Edite o seguinte arquivo For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
Piyush Bansal
6

Não sei como você configurou o MySQL no seu ambiente Linux, mas você verificou?

  • /etc/my.cnf
Buhake Sindi
fonte
5

Tente correr mysqld --help --verbose | grep my.cnf | tr " " "\n"

Saída será algo como

/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/etc/my.cnf
~/.my.cnf
Abram
fonte
Essa é a saída que recebo, mas que parece não ter relação com a instância em execução. Nenhum desses arquivos existe.
user3783243
4

Se você estiver em um Mac com Homebrew, use

informações de fermentação mysql

Você verá algo como

$ 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) *

Essa última linha é a de INSTALLERDIR acordo com os documentos do MySQL

New Alexandria
fonte
3

Encontrei o meu usando

mysqld --help --verbose | grep my.cnf
phaberest
fonte
2

Outra opção é usar o comando whereis.

Por exemplo, whereis my.cnf

jbatista
fonte
11
Você provavelmente seria melhor com 'localizar' se o sistema suportar.
drobert
2

Respondido apenas para usuários do MySQL Workbench,

insira a descrição da imagem aqui

MAX
fonte
Ocorreu um erro "Localização do arquivo de configuração do MySQL (ie: my.cnf) não especificado"
Sukesh Kotian 19/08/19
2

Todas as ótimas sugestões, no meu caso, não encontrei em nenhum desses locais, mas /usr/share/mysqltenho uma VM RHEL e instaleimysql5.5

Roland
fonte
2

Você precisará examinar os vários locais, dependendo da sua versão do 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
Rob Mcelvenny
fonte
2

Você também pode executar este comando.

mysql --help | grep cnf

prafi
fonte
Impressionante !, em janelas eu tive que substituir grepcom findstr: mysql --help | findstr cnfe ele fez a mágica
Laenka-Oss
1

No Ubuntu (edição direta):

$ sudo nano /etc/mysql.conf.d/mysqld.cnf
ferrugem
fonte
no ubuntu 18, este funciona para mim: /etc/mysql/mysql.conf.d/mysqld.cnf
user9869932 22/06/19
0

Eu instalei o pacote xampp apache, php and mysqlno ubuntu . O my.cnfarquivo está localizado na /opt/lampp/etc/pasta Espero que ajude alguém.

Mahendran Sakkarai
fonte
0

Se você estiver usando o MAMP, acesse Templates> MySQL (my.cnf)> [version]

Se você estiver executando o MAMP sem janelas, poderá precisar personalizar a barra de ferramentas usando o botão Personalizar.

Menu de modelos do MAMP PRO

bater
fonte
0

para mim, era que eu tinha o tipo de tabelas "ENGINE = MyISAM", depois que eu mudei para "ENGINE = InnoDB" funcionou :) no PhpMyAdmin no Serviço de Aplicativo do Azure :)

Julho
fonte
0

Caso você esteja em um VPS e esteja tentando editar um my.cnf em um servidor já em execução, tente:

ps aux | grep mysql

Você mostrará os parâmetros em que o comando mysql está sendo executado e onde o --defaults-file pontos para

Observe que seu servidor pode estar executando mais de um servidor MySQL / MariaDB. Se você --defaults-filevir uma linha sem parâmetro, essa instância poderá estar recuperando a configuração dos .cnf mencionados acima, mysqladmin --helpcomo outros indicaram.

Sdlion
fonte
0

Lembre-se de que, embora o mariadDB carregue detalhes de configuração dos vários arquivos my.cnf, conforme listado nas outras respostas aqui, ele também pode carregá-los de outros arquivos com nomes diferentes.

Isso significa que, se você fizer uma alteração em um dos arquivos my.cnf, ele poderá ser substituído por outro arquivo com um nome diferente. Para fazer a mudança, você precisa alterá-la no arquivo de configuração correto (carregado pela última vez) - ou, talvez, alterá-la em todas elas.

Então, como você encontra todos os arquivos de configuração que podem ser carregados? Em vez de procurar arquivos my.cnf, tente executar:

grep -r datadir /etc/mysql/

Ele encontrará todos os locais em que o datadir é mencionado. No meu caso, produz esta resposta:

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

Quando edito esse arquivo (/etc/mysql/mariadb.conf.d/50-server.cnf) para alterar o valor do datadir, ele funciona, enquanto a alteração no my.cnf não. Portanto, qualquer que seja a opção que você queira alterar, tente procurar dessa maneira.

Noel Swanson
fonte
0

Depende do seu acesso certo, mas para mim este trabalho no phpmyadmin sql console

MOSTRAR VARIÁVEIS;

depois, para alterar algumas variáveis, você pode fazer

SET GLOBAL max_connections = 1000;

ou

SET @@ GLOBAL.max_connections = 1000;

Experimente

marino andriamialy
fonte