Estou tentando configurar o WordPress. Tenho o Apache e o MySQL em execução e as contas e o banco de dados estão todos configurados. Tentei fazer uma conexão simples:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
E eu sempre entendo isso:
Erro: 2002 - Arquivo ou diretório inexistente
De qual arquivo ou diretório ele está falando?
Estou em um OS X Snow Leopard, usando o Apache integrado. Instalei o MySQL usando o dmg x86_64.
ATUALIZAÇÃO: descobri que o soquete está em /tmp/mysql.sock, então no php.ini, substituí todas as ocorrências do caminho errado por ele.
php
mysql
connection
mk12
fonte
fonte
/etc/init.d/mysql start
se você estiver em uma distribuição de base debian. se falhou, verifique o/etc/my.cnf
arquivo para o caminho correto do arquivo de socket mysql.Respostas:
Se você usa Linux: o caminho para o arquivo mysql.sock está errado. Isso geralmente ocorre porque você está usando (LAMPP) XAMPP e ele não está em /tmp/mysql.sock
Abra o arquivo php.ini e encontre esta linha:
E fazer isso
fonte
localhost
trabalho e o TCP / IP está funcionando, então alterá-lo para o endereço TCP / IP127.0.0.1
funcionará.Eu tive um problema semelhante e fui capaz de resolvê-lo endereçando meu mysql com em
127.0.0.1
vez delocalhost
.Isso provavelmente significa que há algo errado na configuração dos meus hosts, mas esta solução rápida é o que me leva a começar agora.
fonte
code
127.0.0.1 localhostcode
. O que me deixa curioso para saber por que a conexão através do localhost não funcionou. Se alguém pudesse me esclarecer eu ficaria feliz.localhost
trabalho e o TCP / IP está funcionando, então alterá-lo para o endereço TCP / IP127.0.0.1
funcionará.Isso é para Mac OS X com a instalação nativa do Apache HTTP e instalação personalizada do MySQL .
A resposta é baseada na excelente resposta de @alec-gorge, mas como tive que pesquisar no Google algumas alterações específicas para configurá-lo em minha configuração, principalmente no Mac OS X, pensei em adicioná-lo aqui para fins de integridade.
Habilitar suporte PHP5 para Apache HTTP
Certifique-se de que o suporte a PHP5 esteja habilitado em
/etc/apache2/httpd.conf
.Edite o arquivo com
sudo vi /etc/apache2/httpd.conf
(digite a senha quando solicitado) e descomente (remova;
do início) a linha para carregar o módulo php5_module .Inicie o Apache HTTP com
sudo apachectl start
(ourestart
se já foi iniciado e precisa ser reiniciado para reler o arquivo de configuração).Certifique-se de que
/var/log/apache2/error_log
contém uma linha informando que o php5_module está ativado - você deve verPHP/5.3.15
(ou semelhante).Procurando o nome do arquivo Socket
Quando o MySQL está instalado e funcionando (com
./bin/mysqld_safe
), deve haver linhas de depuração impressas no console que informam onde você pode encontrar os arquivos de log. Observe o nome do host no nome do arquivo -localhost
no meu caso - que pode ser diferente para a sua configuração.O arquivo que vem depois
Logging to
é importante. É onde o MySQL registra seu trabalho.Abra o
localhost.err
arquivo (novamente, o seu pode ter um nome diferente), ou sejatail -1 /Users/jacek/apps/mysql/data/localhost.err
para descobrir o nome do arquivo de socket - deve ser a última linha.Note o
socket:
parte - esse é o arquivo de soquete que você deve usarphp.ini
.Há outra maneira (alguns dizem que é uma maneira mais fácil) de determinar a localização do nome do arquivo do soquete fazendo login no MySQL e executando:
Configurando PHP5 com suporte a MySQL - /etc/php.ini
Falando em php.ini ...
No
/etc
diretório está o arquivo /etc/php.ini.default . Copie-o para /etc/php.ini .Abra
/etc/php.ini
e procure mysql.default_socket .O padrão
mysql.default_socket
é/var/mysql/mysql.sock
. Você deve alterá-lo para o valor que anotou anteriormente - foi/tmp/mysql.sock
no meu caso.Substitua o
/etc/php.ini
arquivo para refletir o nome do arquivo de soquete:Verificação final
Reinicie o Apache HTTP.
Verifique os logs se não houver nenhum erro relacionado ao PHP5. Sem erros significa que você terminou e PHP5 com MySQL deve funcionar bem. Parabéns!
fonte
mysql_connect
, que é o problema real da pergunta original e não um genérico equívoco de instalação de software.localhost
. Ninguém procurando ajuda para configurar o xamp em macos vai chegar aqui pesquisando. Por isso usei o termo 'porcaria'. Este tópico não tem nada a ver com macos, mas apenas com mysql (nem mesmo php).Substituir 'localhost' por '127.0.0.1' no arquivo de configuração (conexão db) ajudou!
fonte
Reiniciar o servidor mysql pode ajudar. No meu caso, reiniciar o servidor economizou muito tempo.
PS- use
sudo service mysql restart
para usuário não root.fonte
Primeiro, verifique se o MySQL está em execução. Comando: mysqld start
Se você ainda não conseguir se conectar: Qual é a aparência do seu /etc/my.cnf? (ou /etc/msyql/my.cnf)
Os outros 2 posts estão corretos no sentido de que você precisa verificar seu soquete porque 2002 é um erro de soquete.
Um ótimo tutorial sobre como configurar o LAMP é: http://library.linode.com/lamp-guides/centos-5.3/index-print
fonte
/usr/local/mysql/mysql-test/include/default_my.cnf
devo copiá-lo como my.cnf/etc
?Não que isso ajude muito, mas nas versões recentes (e ainda menos recentes ) do MySQL, o código de erro 2002 significa “Não é possível conectar ao servidor MySQL local através do soquete [nome-do-soquete]”, de modo que isso pode lhe dizer um pouco mais.
fonte
Expandindo a resposta de Matthias D aqui , consegui resolver este erro de 2002 no MySQL e no MariaDB com caminhos exatos usando estes comandos:
Primeiro obtenha o caminho real para o soquete MySQL:
Em seguida, obtenha o caminho do PHP :
Usando a saída desses dois comandos , vincule-os:
Se isso retornar
No such file or directory
você só precisa criar o caminho para PHP mysql.sock, por exemplo, se seu caminho fosse,/var/mysql/mysql.sock
você executaria:Em seguida, tente o comando sudo ln novamente.
fonte
Eu verificaria seu arquivo php.ini e verificaria se mysql.default_socket está configurado corretamente e também verificaria se seu mysqld está configurado corretamente com um arquivo socket que ele pode acessar. O padrão típico é "/tmp/mysql.sock".
fonte
/var/mysql/mysql.sock
, mas esse caminho não existe.Eu também encontrei esse problema, então modifiquei 'localhost' para '127.0.0.1', ele funciona.
fonte
no meu caso tenho problema com mysqli_connect.
quando eu quiser conectar
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () retornar-me este erro "Não existe tal arquivo ou diretório"
isso funcionou para mim
mysqli_connect('localhost:3306', 'myuser','mypassword')
fonte
O erro 2002 significa que o MySQL não pode se conectar ao servidor de banco de dados local por meio do arquivo de soquete (por exemplo
/tmp/mysql.sock
).Para descobrir onde está seu arquivo de soquete, execute:
em seguida, verifique se seu aplicativo usa o arquivo de soquete Unix correto ou conecte-se através da porta TCP / IP.
Em seguida, verifique se o seu PHP tem a configuração de soquete MySQL correta:
e certifique-se de que o arquivo existe .
Teste o soquete:
Se o soquete Unix estiver errado ou não existir, você pode fazer um link simbólico, por exemplo:
ou corrija seu arquivo de configuração (por exemplo
php.ini
).Para testar a conexão PDO diretamente do PHP, você pode executar:
Verifique também a configuração entre Apache e CLI (interface de linha de comando), pois a configuração pode ser diferente.
Consulte: Solucionando problemas de conexão com o MySQL
Outros utilitários / comandos que podem ajudar a rastrear o problema:
mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
netstat -ln | grep mysql
php -r "phpinfo();" | grep mysql
php -i | grep mysql
xdebug.show_exception_trace=1
em seuxdebug.ini
sudo dtruss -fn mysqld
, tente , no Linux depure comstrace
stat $(mysql_config --socket)
e se você tem espaço livre suficiente (df -h
).net.core.somaxconn
.fonte
Certifique-se de que seu servidor local (MAMP, XAMPP, WAMP, etc.) esteja em execução.
fonte
Eu tive um problema parecido.
Basicamente, aqui o problema é que provavelmente existem duas instâncias do mysql em execução.
A) Um rodando em /etc/init.d
B) Lamp sendo instalado em / opt / lamp
Solução:
Passo 1: - Encontre todas as instâncias do mysql em execução usando commnad "find / | grep mysqld"
Passo 2: - Desligue os serviços rodando em /etc/init.d usando serviço mysql stop
Passo 3: - Reinicie seus serviços Lamp usando / opt / lamp / lamp restart
Você deve estar pronto para ir :)
fonte
Em um Mac, antes de fazer todo o trabalho duro, basta verificar suas configurações
System Preferences > MySQL
. Mais frequentemente do que nunca, experimentei a equipe enfrentando esse problema desde entãoThe MySQL Server Instance is stopped
.Clique no
Start MySQL Server
botão e a mágica acontecerá.fonte
Estou usando PHP-FPM ou várias versões de php em meu servidor. No meu caso, eu atualizo o valor mysqli, pois não há parâmetro de soquete padrão mysql:
para :
obrigado a @Alec Gorge
fonte
Eu tive o mesmo problema. Meu soquete foi eventualmente encontrado em /tmp/mysql.sock. Em seguida, adicionei esse caminho ao php.ini. Eu encontrei o soquete lá verificando a página "Status do servidor" no MySQL Workbench. Se o seu soquete não está em /tmp/mysql.sock, então talvez o MySQL Workbench possa dizer onde ele está? (Concedido que você use o MySQL Workbench ...)
fonte
Instalei o MySQL usando o instalador. Na verdade, não havia nenhum diretório de dados ao lado do diretório 'bin'.
Portanto, criei manualmente o diretório 'data' em "C: \ Program Files \ MySQL \ MySQL Server 8.0". E funcionou (alterando a senha de root seguindo as etapas sugeridas em https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html .
fonte
Digital Ocean MySql 2002-no-such-file-or-directory
Adicionar este final de arquivo
/etc/mysql/my.cnf
Reinicie o MySql
service mysql restart
fonte
Eu também tive o mesmo problema em um servidor Linux. O que me ajudou foi o comando ' sudo reboot ', que é usado para reiniciar o servidor Linux.
fonte
habilitar e iniciar o serviço mariadb
sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service
fonte