As conexões para o host são esporadicamente bem-sucedidas com mysql_connect () e telnet, mas posso sempre executar ping no host com êxito?

1

Quando tento conectar-me a um host na minha LAN com mysql_connect(); , as conexões são bem-sucedidas em algum momento e falham em outros momentos. Eu posso sempre fazer ping no servidor MySQL com sucesso, mas quando tento usar o telnet para conectar-me através da porta 3306, nem sempre funciona. Eu posso ligar para postar 3306 pela primeira vez, mas não depois disso.

5.1.58-1ubuntu1)[n9pK8'Ym7j1Q'khH Got packets out of order
Lost connection with host

C:\Documents and Settings\Administrator>telnet 10.253.48.49 3306
Connecting to 10.253.48.49... Cannot open connection to the host on port 3306:
Connect failed

Pinging is always successful, however:
Reply from 10.253.48.49: bytes=32 time<1ms TTL=64
Reply from 10.253.48.49: bytes=32 time<1ms TTL=64
Reply from 10.253.48.49: bytes=32 time<1ms TTL=64
Reply from 10.253.48.49: bytes=32 time<1ms TTL=64
Reply from 10.253.48.49: bytes=32 time<1ms TTL=64

Além disso, outros clientes na LAN podem se conectar ao host, mesmo quando não posso. Eu posso conectar-me a outro host com sucesso todas as vezes. Como posso resolver esse erro?

    
por woo's not wei 14.06.2012 / 16:01

2 respostas

1

Long shot aqui, mas você tem um endereço IP duplicado na rede? Ou seja um que hospeda o mysql e outro que não e você aleatoriamente se conecta ao caminho certo?

Tente fazer um arp -a e verificar o endereço MAC do IP que você acredita ser o correto. Pode levar algumas tentativas, mas se você tiver um IP duplicado, você eventualmente obterá um endereço MAC diferente para o mesmo IP.

    
por 14.06.2012 / 23:13
0

Na máquina host do MySQL (que presumo que esteja rodando o Ubuntu, com base na sua mensagem de erro), tente executar este comando:

sudo netstat -lntp | grep 3306

Você deve ver o daemon mysqld em execução. Caso contrário, o problema pode ser que o daemon do MySQL da máquina não esteja em execução. Eu acho que o comando no Ubuntu é /etc/init.d/mysql start run como root, que irá iniciar o daemon se ele não estiver rodando. (Eu não uso o Ubuntu, mas é isso que uma pesquisa no google traz. No Arch ele é rc.d start mysqld mas ele não se traduz exatamente no Ubuntu).

Se esse não for o problema, ou seja, o daemon está sendo executado na máquina host, o problema pode ser que o firewall não esteja configurado corretamente e que a porta não esteja aberta. Tente este comando para ver se a porta está aberta ( ambos os comandos são executados na máquina host executando o MySQL, não em sua máquina local onde você está usando PHP)

nmap -v -sT localhost

Se você não vê 3306 listado como aberto e a máquina está usando iptables como firewall, este comando deve abrir essa porta

iptables -I INPUT -p tcp --dport 3306 -d host.machine.ip.address -s your.machine.ip.address -j ACCEPT

que deve permitir que sua máquina cliente (a que executa mysql_connect() , mesmo que não deva), acesse a máquina host do MySQL.

Além disso, como mencionei no meu comentário (sugestão de chapéu para RikudoSennin para isso): Por favor, não use mysql_* funções para novo código. Eles não são mais mantidos e a comunidade iniciou o processo de descontinuação . Veja a caixa vermelha ? Em vez disso, você deve conhecer as declarações preparadas e usar PDO ou MySQLi . Se você não pode decidir qual, este artigo irá ajudá-lo. Se você gosta de aprender, aqui está um bom tutorial de PDO .

EDIT: Depois de mais algumas pesquisas on-line, vejo que outro usuário no ServerFault respondeu a este problema com dois dos três comandos que propus, então estou ligando para essa questão, uma vez que pode ser relevante.

    
por 14.06.2012 / 20:57