Como permitir conexões remotas ao MySQL

3 de março de 2021 Off Por sudoroot

O servidor MySQL padrão escuta apenas no host local. O que significa que ninguém pode conectar o MySQL do sistema remoto. O que também é uma boa prática para fins de segurança.

Em muitos casos, precisamos acessar o banco de dados MySQL de sistemas remotos. Na maioria dos casos possíveis de ambiente de produção, onde usamos instância separada para servidor de banco de dados. Também no caso de aplicativo hospedado em ambiente de equilíbrio de carga, onde criamos um único servidor de banco de dados centralizado acessível a partir de vários sistemas.

Este tutorial o ajudará a configurar o servidor MySQL para permitir conexões de sistemas remotos.

Etapa 1 – configurar o serviço MySQL

O servidor MySQL padrão escuta apenas na interface localhost. Você precisa alterar isso para ouvir em todas as interfaces.

Edite o arquivo de configuração do servidor de banco de dados MySQL em um editor de texto. Os sistemas baseados em Debian têm a configuração do MySQL fiel em /etc/mysql/mysql.conf.d/mysqld.cnf. Vamos editar o arquivo de configuração do MySQL:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 

Procure a configuração de endereço de ligação no arquivo. O endereço de ligação padrão é definido como 127.0.0.1 conforme abaixo:

Altere o valor do endereço de ligação 0.0.0.0para habilitar a escuta do servidor de banco de dados MySQL em todas as interfaces de rede.

Após a alteração, o valor ficará como acima.


No arquivo de configuração do banco de dados MySQL 8, você não verá a configuração do endereço de ligação.
Portanto, você só precisa adicionar manualmente o endereço de ligação na
[mysqld]tag.

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = / var / lib / mysql
log-error = /var/log/mysql/error.log
endereço de ligação = 0.0.0.0

Salve o arquivo de configuração e feche-o.

Reinicie o serviço MySQL para aplicar as alterações.

systemctl restart mysql.service 

Agora, verifique as alterações e o MySQL está ouvindo em todos os hosts remotos. Execute o seguinte comando para visualizar o status do serviço:

netstat -tulpn  | grep -e "Local Address" -e "mysql" 

Proto Recv-Q Send-Q Endereço Local Endereço Estrangeiro Estado PID / Nome do Programa
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1698595 / mysqld
tcp6 0 0 ::: 33060 ::: * LISTEN 1698595 / mysqld

Você verá que o MySQL agora está escutando no 0 0.0.0.0:3306endereço local. Isso significa que o servidor agora está escutando em todas as interfaces de rede na porta 3306.

Etapa 2 – Criar usuário MySQL com acesso remoto

Em seguida, você precisa criar um usuário MySQL para se conectar a partir de um host remoto.

mysql> CRATE USER 'username' @ 'remote_server_ip_or_hostname' IDENTIFICADO POR 'pa $$ word';
  • nome de usuário – o nome da conta de usuário usada para fazer login no servidor MySQL
  • remote_server_ip_or_hostname – Este é o endereço IP ou nome do host do host remoto de onde o usuário tem permissão para se conectar ao servidor mysql.

Você também pode usar ‘%’ em vez de host remoto para permitir qualquer host remoto. Por exemplo:

mysql> CRIAR USUÁRIO 'username' @ '%' IDENTIFICADO POR 'pa $$ word';

Como alternativa, você pode criar uma nova conta de usuário que só se conectará do host remoto com o seguinte comando:

mysql> GRANT ALL on *. * TO 'username' @ 'remote_server_ip_or_hostname';

Recarregue os privilégios para executar o servidor MySQL.

mysql> PRIVILÉGIOS DE FLUSH;

Neste ponto, você configurou seu servidor MySQL para escutar de hosts remotos. Criou uma conta de usuário MySQL usada para autenticação de hosts remotos.

Em seguida, é ajustar os grupos de segurança ou firewall do sistema para abrir a porta MySQL para sistemas remotos.

Etapa 3 – Ajustar Firewall

Antes de alterar o firewall do sistema, o sistema em execução em ambientes de hospedagem em nuvem deve ter um grupo de segurança atualizado para abrir a porta MySQL com base em serviços de hospedagem.

Então, você precisa abrir a porta no firewall do sistema (se ativo). Por exemplo, a maior parte do sistema Linux optou por firewalld e alguns sistemas como os sistemas baseados em Debian usam firewall UFW.

Atualize o firewall com base em seus sistemas operacionais.

Usando FirewallD

O FirewallD é o serviço de firewall padrão em sistemas baseados em CentOS e RedHat. Você pode usar o seguinte comando para abrir a porta 3306 do MySQL para todos, mas não é recomendado para servidores de produção.

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp 
sudo firewall-cmd --reload 

O servidor de produção é recomendado para abrir a porta apenas para hosts necessários. Os usos do FirewallD podem usar regras ricas para abrir portas específicas para endereços IP específicos ou rede apenas. Por exemplo:

firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.0/24"
  port protocol="tcp" port="3306" accept' 

Depois de adicionar a regra necessária no firewalld, certifique-se de recarregar para aplicar as alterações em tempo de execução.

sudo firewall-cmd --reload 

Usando UFW

O UFW (Uncomplicated Firewall) é a ferramenta de firewall padrão no sistema Ubuntu e Debian. Você pode usar o seguinte comando para abrir a porta 3306 de todos.

sudo ufw allow 3306/tcp 

Mas os usuários de produções são recomendados para abrir portas para ip ou rede específicos apenas. Para permitir o acesso de um endereço IP específico, use comandos como:

sudo ufw allow from 192.168.0.0/24 to any port 3306 

Certifique-se de alterar 192.168.0.0/24 com o endereço IP da sua rede ou sistema.

Conclusão

Este tutorial o ajudou a configurar o seridor MySQL para aceitar conexão remota de hosts remotos. Também criou uma conta de usuário MySQL com permissão para se conectar a partir de hosts remotos.