O que o mysqld.sock deve conter, porque não o tenho?

19

Alguém sabe por que meu arquivo /var/run/mysqld/mysqld.sock socket não estaria no meu computador quando eu instalar (ou reinstalar) o MySQL 5.1?

Neste momento, quando tento iniciar um servidor com o mysqld, recebo erros como Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect , mas a criação de um arquivo em branco com esse nome (como sugerido nos fóruns do ubuntu) não teve êxito.

Eu tinha o mysql e o postgres funcionando bem até atualizar para a natty há pouco; Passei horas percorrendo os dois bancos de dados tentando descobrir o que está acontecendo. Eu posso desistir de postgres, mas não posso trabalhar sem uma cópia de trabalho do mysql.

A parte mais estranha: eu uso o Kubuntu, e meu entendimento é que o KDE usa o mysql para armazenar permissões de usuários, etc. Eu não estou tendo problemas com permissões estranhas; posso levar isso para significar que (de alguma forma?) o MySQL está realmente funcionando?

Talvez esses arquivos de soquete vivam em um lugar diferente em natureza? Seria mais fácil simplesmente reinstalar o SO fresco? Neste ponto, estou aberto a qualquer sugestão que pare de desperdiçar meu tempo.

    
por egbutter 11.06.2011 / 01:04

6 respostas

15

Um arquivo de soquete na verdade não contém dados, ele o transporta. É um tipo especial e incomum de arquivo criado com chamadas / comandos especiais do sistema. Não é um arquivo comum.

É como um pipe que o servidor e os clientes podem usar para conectar e trocar solicitações e dados. Além disso, é usado apenas localmente. Sua importância é meramente como um local de encontro acordado no sistema de arquivos.

Criar um arquivo antigo simples e colocá-lo nesse local pode, na verdade, interferir no servidor que o cria ... e, assim, impedir que os clientes locais se conectem ao servidor.

Minha recomendação é remover qualquer arquivo que você colocar no local. O arquivo de soquete especial é criado pelo servidor.

    
por 11.06.2011 / 01:31
15

Quando você especifica host=localhost , o cliente mysql tentará efetuar login no servidor mysql usando unix named pipe, que requer um arquivo .sock .

Isso pode ser ignorado especificando host = 127.0.0.1. Isso fará com que o cliente mysql use TCP para se conectar ao servidor.

Extraído da documentação do MySQL :

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass
    
por 13.02.2013 / 16:47
10

Um soquete é um pseudo arquivo especial usado para transmissão de dados por leitura e gravação, não para armazenamento de dados.

O arquivo de soquete é criado quando o serviço é iniciado e removido quando o serviço é finalizado. A localização do arquivo é definida em /etc/my.cnf da seguinte forma:

[mysqld]
socket=/var/run/mysql/mysql.sock
    
por 11.06.2011 / 01:34
6

No meu caso, a execução de mysqld_safe criou um novo arquivo mysqld.sock .

$ cd /etc/init.d/
$ mysqld_safe

Você provavelmente não receberá um aviso, mas se você reiniciar sua sessão, um arquivo mysqld.sock estará em algum lugar. Encontre-o com

$ sudo find / -type s | grep mysqld.sock
    
por 06.09.2013 / 15:16
1

Eu tive o mesmo problema com a falta do mysqld.sock. Eu fui para o diretório que continha o mysql, ou seja, /usr/bin no meu caso. Então eu emiti o comando

mysql mysql --host=localhost --password=whatever --port=3306

O mysql duplo não é um erro de digitação, mas sim o mysql é um banco de dados que sempre estará lá em uma nova instalação do MySQL. Eu não sei se --host , --password ou --port são necessários, mas desde que funcionou para mim usando esses parâmetros estou incluindo-os. Uma vez que o MySQL apareceu, eu entrei na tabela de usuários como defini a senha para root. Uma vez que o MySQL surgiu, o arquivo de soquete ausente foi criado. Espero que isso ajude alguém desde que eu lutei por dias.

    
por 25.12.2012 / 05:00
0

Se você estiver usando o nginx php-fastcgi e tiver o erro 502 Bad Gateway do que você tem que olhar para a sua configuração de host virtual no arquivo de configuração nginx. Você precisa definir ou corrigir o parâmetro fastcgi_pass . O fastcgi_pass é a variável para definir a conexão do soquete entre nginx e php CGI.

Outro ponto de discussão é que o script de partida binária poderia perdeu as seguintes entradas (importante) abrir com: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

O conteúdo completo do meu script inicial / usr / bin / php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
    
por 22.05.2015 / 15:48