MySQL: Permitir conexões remotas
Depois de instalar um servidor MySQL em um sistema Linux, por padrão ele aceitará apenas conexões de entrada dele mesmo (ou seja, o endereço de loopback 127.0.0.1
).
Esta configuração padrão funciona perfeitamente se você estiver apenas tentando ler ou gravar informações do banco de dados no mesmo servidor. Assim, os usuários que hospedam seu site e servidor MySQL na mesma caixa não precisarão fazer nenhuma configuração extra para permitir conexões remotas.
Se você deseja permitir conexões remotas ao seu servidor MySQL, porque você tem outros computadores e/ou usuários que precisam acessar esses dados, você precisará vincular o serviço MySQL a um endereço IP público em seu servidor e talvez permitir a entrada do MySQL conexões através do firewall do sistema.
Neste tutorial, guiaremos você pelas instruções passo a passo para permitir conexões remotas a um servidor MySQL em um sistema Linux. Estas instruções devem funcionar independentemente de qualquer distribuição Linux que você esteja usando.
Neste tutorial você aprenderá:
-
Como permitir conexões remotas ao servidor MySQL
Como permitir conexões remotas ao MySQL através do firewall do sistema
Como criar ou alterar um usuário MySQL para permitir conexões remotas
MySQL: Permitir conexões remotas com instruções passo a passo
Permitir conexões remotas ao seu banco de dados MySQL é um processo de três etapas.
Primeiro, precisaremos configurar o serviço MySQL para ser acessível a partir de máquinas remotas, configurando um endereço de ligação público no arquivo de configuração do MySQL.
Em segundo lugar, precisaremos permitir o acesso remoto através do firewall do nosso sistema. Por padrão, o MySQL é executado na porta 3306, portanto, as conexões com esta porta precisarão ser permitidas.
Terceiro, precisaremos criar um novo usuário ou editar um existente para torná-lo acessível a partir de endereços IP remotos. Podemos optar por permitir todos os endereços IP ou apenas alguns específicos.
Configurar endereço de ligação do MySQL
Começaremos abrindo o arquivo
/etc/mysql/mysql.cnf
. Com permissões de root, abra no nano ou em seu editor de texto favorito.$ sudo nano /etc/mysql/mysql.cnf
Encontre a configuração que diz
bind-address
abaixo da seção[mysqld]
. Por padrão, isso deve estar configurado atualmente para o endereço de loopback127.0.0.1
. Exclua esse endereço e coloque o endereço IP público do seu servidor em seu lugar. Usaremos10.1.1.1
apenas para fins de exemplo.[mysqld] bind-address = 10.1.1.1
Se desejar, você pode usar
0.0.0.0
como seu endereço de ligação, que é um curinga e deve vincular o serviço a todas as interfaces acessíveis. Isso não é recomendado, mas pode ser bom para solucionar problemas caso você encontre problemas posteriormente.[mysqld] bind-address = 0.0.0.0
Depois de fazer essa alteração, salve as alterações no arquivo e saia dele. Então, você precisará reiniciar o serviço MySQL para que as alterações tenham efeito.
$ sudo systemctl restart mysql
Em algumas distros, o serviço pode ser chamado de
mysqld
:$ sudo systemctl restart mysqld
Permitir acesso remoto através de firewall
Supondo que você esteja usando a porta 3306 para o seu servidor MySQL, precisaremos permitir isso através do firewall do sistema. O comando que você precisa executar dependerá da distribuição que você está usando. Consulte a lista abaixo ou adapte o comando conforme necessário para aderir à sintaxe do firewall do seu próprio sistema.
Em sistemas Ubuntu e outros que utilizam ufw (firewall descomplicado):
$ sudo ufw allow mysql
No Red Hat, CentOS, Fedora e sistemas derivados que usam firewalld:
$ sudo firewall-cmd --zone=public --add-service=mysql --permanent
$ sudo firewall-cmd --reload
E o bom e velho comando iptables
que deve funcionar em qualquer sistema:
$ sudo iptables -A INPUT -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Permitir conexões remotas para um usuário específico
Agora que o serviço MySQL pode aceitar conexões de entrada e nosso firewall permitirá sua passagem, só precisamos configurar nosso usuário para aceitar conexões remotas.
Comece abrindo o MySQL com a conta root.
$ sudo mysql
Ou, em algumas configurações, pode ser necessário inserir o seguinte comando e fornecer sua senha root:
$ mysql -u root -p
-
Se você já possui um usuário criado e precisa configurá-lo para ser acessível a partir de um endereço IP remoto, podemos usar o comando
RENAME USER
do MySQL. Tornaremos nosso usuáriolinuxconfig
acessível a partir do endereço IP10.150.1.1
no comando de exemplo abaixo, mas adapte isso conforme necessário para sua própria configuração.mysql> RENAME USER 'linuxconfig'@'localhost' TO 'linuxconfig'@'10.150.1.1';
Ou, se você estiver criando este usuário pela primeira vez, usaremos o comando
CREATE USER
. Certifique-se de substituir o seguinte nome de usuário, endereço IP e senha pelos seus.mysql> CREATE USER 'linuxconfig'@'10.150.1.1' IDENTIFIED BY 'password_here';
Se preferir que seu usuário seja acessível a partir de QUALQUER endereço IP, você pode usar
%
em seu comando em vez de um endereço IP específico. Veja como editar o usuário existente para ser acessível a partir de qualquer IP:mysql> RENAME USER 'linuxconfig'@'localhost' TO 'linuxconfig'@'%';
E aqui está como criar um novo usuário que pode ser acessado de qualquer endereço IP:
mysql> CREATE USER 'linuxconfig'@'%' IDENTIFIED BY 'password_here';
Isso é tudo que há para fazer. Após conceder ao usuário acesso a um ou mais bancos de dados, você poderá usar as credenciais da conta para acessar o banco de dados remotamente.
Considerações finais
Neste tutorial, vimos como permitir conexões remotas ao serviço MySQL em um sistema Linux. Este foi um processo de três partes para tornar o serviço acessível, permitir conexões através do firewall e tornar uma conta MySQL acessível. Como o MySQL funciona basicamente da mesma forma em todas as distribuições, essas etapas devem ser úteis para todos.