Acessando o MySQL remotamente: Seperando aplicação PHP do banco de dados!

Olá Jack,

Estou fazendo um teste… colocando a base de dados mysql em uma máquina e tentando rodar do provedor os programas em php. só que não estou conseguindo conectar na base.

O que preciso fazer para ele conectar na base na outra máquina ?
– As duas estão na rede interna.
– Não há firewall do windows ativados na máquina.
– Instalação normal do apache2triad.
– tentei colocar no lugar do ” localhost ” o endereço da máquina “192.168.160.198” tentei com ” 192.168.160.198:80 ” e não funcionou

Bem, na prática a limitação não é por parte do PHP, mais especificadamente da função mysql_connect(), mas sim, uma pré-configuração do próprio MySQL, que tem por objetivo deixar o daemon mais seguro enquanto gerencia as conexões na memória do servidor. Na realidade o MySQL vem configurado por default para não aceitar conexões de fora do próprio servidor onde ele está instalado.

Isso significa dizer que você, por default, não pode separar a sua aplicação do servidor onde o MySQL está rodando. Contudo, quando se diz “por default”, não significa dizer que não é possível se alterar!;) – A primeira coisa a se fazer no caso em específico e, em praticamente todos os ambientes (Linux ou Windows) onde o MySQL está rodando, é alterar o arquivo my.cnf (que no caso do Apache2Triad encontra-se em C:\Windows\my.cnf).

No caso do seu my.cnf conter a linha (geralmente no início do arquivo ou na seção [mysqld]) SKIP=”–skip-networking”, comente-a (basta inserir no início desta linha um “#”… exemplo: #SKIP=”–skip-networking”). Essa instrução anula de forma declarada a possibilidade de conexões vindas da rede (local ou não).

Outra opção importante, é comentar (caso haja) a linha: bind-address = 127.0.0.1, ou seja, inserir o cercadilha no início. Essa linha, do jeito que está, acaba resolvendo nomes (tabelas, bases, usuários) apenas localmente (127.0.0.1). Como o nosso objetivo é fazer acesso externo, torna-se imprescindível comentar a linha. Depois de proceder com as alterações, reinicie o serviço no seu sistema operacional (no caso do Windows, inicar->executar->services.msc)!

Bem, agora que a configuração do MySQL já está admitindo conexões remotadas, transações originadas de um servidor de aplicações (onde está o seu sistema/site php), chega a hora de definirmos que usuário será aceito durante as conexões remotas; pra que base/tabela de dados e de que endereço (número IP, por exemplo) elas virão.

Conectando remotamente no servidor MySQL 192.168.1.2 (no exemplo um servidor Windows sendo acessado por um servidor Linux – via Putty)

O primeiro passo é conectar ao SGBD MySQL e a base de dados que queremos acessar remotamente, de preferência como usuário root do MySQL afim de definirmos as permissões para acesso à base em questão. Neste caso, abra um prompt do MSDOS ou um terminal no Linux e digite:

mysql -D loja -u root

Note, que neste exemplo, o banco/base de dados chama-se loja e, estou logando como usuário root (não do sistema operacional, mas do MySQL (que no caso do Apache2Triad possui a mesma senha). Em seguida:

mysql> grant all privileges on loja.* to root@192.168.160.105 identified by “teste”;

Aqui estou liberando acesso para o usuário root, cuja origem do pedido deste acesso venha da máquina (servidor Apache + PHP) 192.168.160.105, para todas as tabelas da base de dados loja (loja.*), cuja senha de acesso requisitada será teste. Note que é possível liberar o acesso para qualquer usuário válido e com permissões úteis na respectiva base de dados, bem como, liberar acesso apenas para uma tabela de dados do banco de dados, por exemplo, a tabela tab_clientes. Neste caso, ao invés de repassar o “loja.*”, basta repassar “loja.tab_clientes”.

Outra observação importante é que todas as mudanças/implementações até aqui, precisam ser feitas, obviamente, na máquina 192.168.160.198, ou seja, no servidor onde o MySQL está rodando e os dados do sistema/site estão disponíveis. Quanto ao seu código-fonte PHP, nada precisa ser mudado bruscamente, basta usar normalmente a função mysql_connect():

//CONEXÃO COM O BANCO DE DADOS MYSQL
$conexao = mysql_connect(‘192.168.160.198′,’root’,’teste’) or die (“Configuracao de Banco de Dados Errada!”);
mysql_select_db(“loja”,$conexao);

É possível em alguns casos, como em algumas distribuições Linux que o acesso remoto do usuário root do MySQL esteja bloqueado. Uma boa dica é criar um usuário comum passando a ele as respectivas autorizações estruturais à base.

Espero ter ajudado! 😉