Nessa dica quero mostrar como configurar o servidor Mysql para acesso remoto, no sentido de você poder se conectar nele de qualquer lugar.
Nos meus testes utilizei dois micros, um notebook como cliente e um micro com o servidor Mysql rodando.
Os dois possuem o sistema operacional Ubuntu 10.10, então vamos lá!
Esquema básico do básico:
192.168.0.105 187.50.245.123
Cliente Mysql --------------->> Servidor Mysql
O Firewall
Tive que desenvolver uma maneira de fazer meus shell script's conversarem com esse servidor remotamente e tive a curiosidade de verificar a performance dessa conexão, como possuo uma routerboard com RouterOS Mikrotik tive que fazer um redirecionamento de portas para o meu servidor mysql, ficando assim:
--->> 187.50.245.123:3306 -->> 192.168.0.200:3306
Explicando: Toda requisição direcionada ao meu ip público na porta 3306 será redirecionada para o meu servidor mysql na porta 3306.
A regra para isso é nada mais que um dst-nat no meu ip público, segue a regra:
RouterOS regra:
/ip firewall nat
add action=dst-nat chain=dstnat comment="redir server mysql" disabled=no \
dst-address=187.50.245.123 dst-port=3306 protocol=tcp to-addresses=\
192.168.0.200 to-ports=3306
O redirecionamento do firewall está pronto, agora é necessário configurar o servidor Mysql para aceitar as conexões de fora e dar privilégios ao usuário.
O Servidor Mysql
Altere a seguinte linha do arquivo /etc/mysql/my.cnf:
bind-address = 127.0.0.1
Altere para:
bind-address = 0.0.0.0
Perceba o risco de segurança. você pode permitir somente certo ip, a finalidade aqui é didática não vou discutir segurança.
Agora é necessário acessar o prompt mysql do servidor para dar direitos de acesso ao seu usuário.
No meu caso aqui é usuário default mesmo, o root, e a senha configurada foi a "toor":
root@ubuntu:~# mysql -uroot -ptoor
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 179
Server version: 5.1.49-1ubuntu8.1 (Ubuntu)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Ok, comando para dar privilégios totais ao usuário root, de qualquer micro na rede local ou remota:
mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED By 'toor';
Query OK, 0 rows affected (0.00 sec)
Observação importante para que não haja confusão:
Aqui no servidor Mysql está sendo dado o direito de acesso de qualquer lugar fora do mesmo micro, mas ainda assim é necessária a correta configuração de firewall para que as conexões ser realizadas com sucesso.
O cliente
No micro cliente você precisa ter o cliente mysql instalado, se ainda não tiver instale com:
Se for Debian ou derivado
# apt-get install mysql-client-core-5.1
Se for outra distribuição use o sistema de instalação da mesma ou baixe os fontes no site oficial.
A sintaxe para conexão remota é:
mysql --host=endereçoip -u usuario -psuasenha
No meu caso sendo:
# mysql --host=187.50.245.123 -u root -ptoor
Ok, conexão feita com sucesso!
Nos meus testes cada query realizada dessa forma remota utilizava uma média de 9 pacotes de dados totalizando 660 bytes.
Segue imagens:
1º query: Cadastro de um contato em uma agenda
681 bytes - 9 pacotes
Em se tratando de performance eu não percebi lentidão nos meus testes, seria necessário mais testes para se chegar à uma conclusão concreta sobre isso, tanto que também depende da banda de internet usada em cada lado.
Na próxima publicação falarei um pouco sobre shell script na conexão remota com o banco de dados.
É isso, espero que possa ajudar alguém!
Artigo original no meu blog: Tecnologia em Redes e Servidores