Como configurar o acesso remoto ao MySQL no Compute Engine.

Um dos principais casos de uso para instalar o MySQL no Compute Engine como uma alternativa ao Cloud SQL é manter seus aplicativos de cliente e de servidor MySQL em uma rede privada. O Cloud SQL atribui automaticamente um endereço IPv6 público a cada instância do Cloud SQL e oferece a opção de adicionar um endereço IPv4 público. Além disso, apenas clientes com endereços IPv4 ou IPv6 públicos podem acessar remotamente uma instância do Cloud SQL.

Para executar o cliente e o servidor MySQL em uma rede privada, use as instâncias do Compute Engine para o servidor e o cliente. Este documento descreve como configurar o aplicativo de servidor MySQL para aceitar o tráfego remoto de um cliente MySQL que esteja instalado em uma instância do Compute Engine na mesma rede privada.

Para saber informações sobre como escolher a implantação correta do MySQL, consulte Como instalar o MySQL no Compute Engine.

Objetivos

  • Criar uma instância do Compute Engine e instalar o servidor MySQL.
  • Criar uma instância do Compute Engine e instalar o cliente MySQL.
  • Configurar o servidor MySQL para acesso remoto.
  • Conectar-se remotamente ao MySQL.
  • Criar uma regra de firewall para abrir a porta 3306.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud Platform:

  • Compute Engine

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Usuários novos do GCP podem estar qualificados para uma avaliação gratuita.

Antes de começar

Conclua as etapas deste documento usando o Console do GCP, mas caso prefira usar a ferramenta de linha de comando gcloud, siga estas etapas para ativar a API Compute Engine e instalar o SDK do Google Cloud.

  1. Use o Console do GCP para ativar a API Compute Engine.

  2. Instale o SDK do Cloud.

  3. Configure seu espaço de trabalho para tornar os comandos menos detalhados. Substitua os valores do seu projeto em project-id e my-zone nos comandos a seguir. Para ver a lista completa de zonas, consulte Regiões e zonas disponíveis.

    gcloud config set project project-id
    gcloud config set compute/zone my-zone
    

Criar uma instância do Compute Engine e instalar o servidor MySQL

Crie uma instância do MySQL e estabeleça uma conexão SSH com a instância recém-criada. O sistema operacional padrão é o Debian 9. Se você preferir usar outro sistema operacional para este tutorial, escolha uma das opções descritas na página Sistemas operacionais.

Criar uma instância do Compute Engine

Para criar uma instância do Compute Engine no Console do GCP:

Console


  1. No Console do GCP, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VMs"

  2. Clique em Criar instância.
  3. Defina o Nome como my-server.
  4. Clique na guia Gerenciamento.
  5. Na seção Tags, adicione mysql-server.
  6. Clique em Criar para criar a instância.

Para estabelecer uma conexão SSH, siga estas etapas:

  1. No Console do GCP, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VMs"

  2. Na lista de instâncias de máquina virtual, clique em SSH na linha da instância à qual você quer se conectar.

    Botão

gcloud


  • Crie uma instância do Compute Engine. Configure a instância da seguinte maneira:
    • Nomeie a instância my-server.
    • Defina a sinalização --zone com a zona onde será criada a instância.
    • Defina a sinalização --tags como mysql-server.
    gcloud compute instances create my-server --zone [ZONE] --tags mysql-server
  • Estabelecer uma conexão SSH com a instância my-server :
    gcloud compute ssh my-server

    Instalar o servidor MySQL

    As etapas a seguir descrevem como instalar o MySQL em uma instância do Compute Engine.

    Debian e Ubuntu


    1. Atualize o gerenciador de pacotes apt-get.

      sudo apt-get update
      
    2. Instale o MySQL. O processo de instalação inicia o serviço MySQL para você.

      sudo apt-get -y install mysql-server
      

    CentOS 6 e RHEL 6


    1. Instale o MySQL.

      sudo yum -y install mysql-server
      
    2. Inicie o servidor MySQL.

      sudo service mysqld start
      

    CentOS 7 e RHEL 7


    A versão 7 do CentOS e do RHEL agora contém MariaDB em vez de MySQL como parte do seu sistema de gerenciamento de pacotes. Para instalar o MySQL no CentOS 7, você precisa primeiro atualizar o gerenciador de pacotes.

    1. Atualize o gerenciador de pacotes para incluir o MySQL.

      sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      
    2. Instale o MySQL.

      sudo yum -y install mysql-community-server
      
    3. Inicie o servidor MySQL.

      sudo /usr/bin/systemctl start mysqld
      

    Melhorar a segurança da instalação do MySQL

    Para melhorar a segurança da instalação do MySQL, execute o comando mysql_secure_installation. Se você não tiver configurado uma senha durante o processo de instalação, crie uma nesta etapa. Para mais informações sobre este comando, consulte a documentação do MySQL relativa a mysql_secure_installation.

        sudo mysql_secure_installation
    

    Criar uma instância do Compute Engine e instalar o cliente MySQL

    Crie uma instância do Compute Engine que utilize o cliente MySQL para acessar remotamente o servidor MySQL na instância my-server. O sistema operacional padrão é o Debian 9. Se você preferir usar outro sistema operacional para este tutorial, escolha uma das opções descritas na página Sistemas operacionais.

    Criar uma instância do Compute Engine e instalar o cliente MySQL

    Console


    1. Clique em Nova instância. Nomeie a instância como my-client.

    2. Para especificar um sistema operacional diferente do valor padrão, na seção Disco de inicialização, clique em Alterar. Em seguida, escolha o sistema operacional e clique em Selecionar.

    3. Clique em Gerenciamento, segurança, discos, rede, locação individual para ver as configurações avançadas. Na guia Rede, adicione uma tag de rede chamada mysql-client.

    4. Clique em Criar.

    Para receber os endereços IP internos das duas instâncias, siga estas etapas:

    1. Na página de instâncias de VM no Console do GCP, clique em my-client. Anote o endereço IP listado em IP interno.

    2. Volte para a página de instâncias de VM e clique em my-server. Anote o endereço IP listado em IP interno.

    gcloud


    1. Para criar uma instância do Compute Engine, use o comando gcloud compute instances create. Para usar outro sistema operacional, especifique o projeto e a família da imagem do sistema operacional relevante usando as sinalizações de linha de comando --image-project e --image-family. Para visualizar uma lista de projetos e famílias de imagens disponíveis, execute o comando gcloud compute images list.

      gcloud compute instances create my-client --tags 'mysql-client'
      
    2. Execute o comando a seguir e anote os endereços dos IPs internos das instâncias listadas na coluna INTERNAL_IP:

      gcloud compute instances list
      

    Estabelecer uma conexão SSH com my-client

    Siga estas instruções para estabelecer uma conexão SSH com a instância my-client recém-criada.

    Console


    1. Na Página de instâncias de VM no Console do GCP, localize my-client na lista de instâncias.

    2. Na coluna Conectar, clique em SSH. O terminal do SSH será aberto em uma janela do navegador.

    gcloud


    Conecte-se à instância usando SSH.

        gcloud compute ssh my-client
    

    Instalar o cliente MySQL

    As etapas a seguir descrevem como instalar o cliente MySQL my-client.

    Debian e Ubuntu


    1. Atualize o gerenciador de pacotes apt-get.

      sudo apt-get update
      
    2. Instale o cliente MySQL. O processo de instalação inicia o serviço MySQL para você.

      sudo apt-get -y install mysql-client
      

    CentOS 6 e RHEL 6


    Instale o cliente MySQL.

        sudo yum -y install mysql-client
    

    CentOS 7 e RHEL 7


    A versão 7 do CentOS e do RHEL agora contém MariaDB em vez de MySQL como parte do seu sistema de gerenciamento de pacotes. Para instalar o MySQL no CentOS 7, você precisa primeiro atualizar o gerenciador de pacotes.

    1. Atualize o gerenciador de pacotes para incluir o MySQL.

      sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      
    2. Instale o cliente MySQL.

      sudo yum -y install mysql-community-client
      

    Configurar o servidor MySQL em my-server

    Use a conexão SSH atual com my-server para configurar o servidor MySQL. Se você tiver fechado a conexão SSH com my-server, siga estas instruções para restabelecer uma conexão SSH.

    Console


    Para estabelecer uma conexão SSH, siga estas etapas:

    1. Na Página de instâncias de VM no Console do GCP, localize sua instância do my-server na lista.

    2. Na coluna Conectar, clique em SSH. O terminal do SSH será aberto em uma janela do navegador.

    gcloud


    Conecte-se à instância usando SSH.

        gcloud compute ssh my-server
    

    Para configurar o servidor MySQL para que ele aceite conexões remotas de um cliente MySQL em my-client, modifique o arquivo de configuração do MySQL e adicione o usuário à tabela de usuários do MySQL.

    1. Abra o arquivo de configuração my.cnf para edição.

      sudo nano /etc/mysql/my.cnf
      
    2. Na linha que define bind-address como 127.0.0.1, substitua 127.0.0.1 pelo endereço IP interno da instância do my-server.

      bind-address            = <internal-ip-my-server>
      
    3. Salve a alteração e saia do editor de texto.

    4. Reinicie o serviço MySQL.

      sudo service mysql restart
      
    5. Faça login no servidor MySQL como usuário raiz do MySQL.

      mysql --user=root -p
      

      Quando você se conecta ao MySQL, o prompt muda para:

      mysql>
      
    6. Na linha de comando do MySQL, crie um novo usuário chamado TESTUSER, substituindo novamente <internal-ip-my-client> pelo endereço IP interno da instância my-client e <some-password> por uma senha de sua escolha. Você vai precisar da senha para acessar remotamente o servidor MySQL.

      CREATE USER 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    7. Na linha de comando do MySQL, conceda os privilégios necessários ao recém-criado TESTUSER.

      GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    8. Saia da linha de comando MySQL e encerre a conexão SSH com my-server.

      exit
      exit
      

    Remover o endereço IP externo relativo a my-server

    A instância my-server não precisa de um endereço IP externo porque o cliente pode acessar my-server pelo endereço IP interno. Embora seja possível remover o endereço IP externo da instância my-client, isso não é necessário, uma vez que é mais fácil estabelecer uma conexão SSH com my-client se ele ainda tiver um endereço IP externo.

    Siga estas instruções para remover o endereço IP externo relativo à instância my-server.

    Console


    Para remover o endereço IP externo, siga estas etapas:

    1. Na Página de instâncias de VM no Console do GCP, localize my-server na lista de instâncias.

    2. Na coluna Nome, clique em my-server.

    3. Procure IP externo e clique em Editar.

    4. Selecione Nenhum na lista suspensa e clique em Salvar.

    gcloud


    Para remover o endereço IP externo, atualize as configurações.

        gcloud compute instances delete-access-config my-server --access-config-name "external-nat"
    

    Acessar o servidor MySQL remotamente

    As etapas a seguir descrevem como se conectar ao servidor MySQL em my-server pela instância my-client.

    1. Conecte-se ao servidor MySQL usando o cliente MySQL.

      mysql --host='<internal-ip-my-server>' --user=TESTUSER --password
      
    2. Agora é possível executar os comandos do MySQL. Por exemplo, este comando mostra os threads em execução, inclusive a conexão atual:

      show processlist;
      
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      | Id | User     | Host                                  | db   | Command | Time | State | Info             |
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      | 38 | TESTUSER | my-client.c.mysql-1043.internal:59154 | NULL | Query   |    0 | NULL  | show processlist |
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      1 row in set (0.00 sec)
      

      Use o comando a seguir para gerar uma lista de usuários.

      SELECT User, Host, Password FROM mysql.user;
      
      +------------------+--------------+-------------------------------------------+
      | User             | Host         | Password                                  |
      +------------------+--------------+-------------------------------------------+
      | root             | localhost    | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | TESTUSER         | 10.240.88.10 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | root             | 127.0.0.1    | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | root             | ::1          | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | debian-sys-maint | localhost    | *619310B1BAC2FD6F6174D5C73C9E5A35F3B8F729 |
      +------------------+--------------+-------------------------------------------+
      5 rows in set (0.00 sec)
      
    3. Ao terminar de executar os comandos, use exit para sair do cliente MySQL e use exit novamente para sair da instância do Compute Engine.

      exit
      exit
      

    Considerações de rede avançada

    Normalmente, quando você configura o acesso remoto para o servidor MySQL, precisa abrir a porta 3306 no servidor. Neste tutorial, você não precisou fazer isso porque a configuração de rede padrão inclui uma regra de firewall default-allow-internal que permite o tráfego interno entre instâncias do Compute Engine em várias portas, inclusive a 3306.

    Se você criar sua própria configuração de rede sem uma regra de firewall que inclua a porta 3306, vai precisar abrir essa porta. Para simular essa condição, modifique a regra default-allow-internal para que ela exclua a porta 3306.

    As regras de firewall podem ser baseadas em tags ou intervalos de endereço IP. Esses intervalos são úteis quando o objetivo é conceder acesso a vários endereços IP internos. As tags oferecem uma solução mais flexível quando se trata de conceder acesso a instâncias específicas na rede. Elas facilitam a inclusão de novos clientes sem conceder acesso a vários endereços IP. Você só precisa atribuir a marca apropriada à nova instância do cliente MySQL. Por exemplo, você pode criar uma nova regra de firewall que permita o tráfego de todas as instâncias do cliente marcadas com mysql-client.

    Lembre-se de que você já atribuiu tags às duas instâncias criadas neste tutorial: mysql-server à instância my-server e mysql-client à instância my-client.

    As seções a seguir descrevem como modificar a regra de firewall padrão para excluir a porta 3306 e criar uma nova regra de firewall que abra essa porta em todas as instâncias marcadas com a tag mysql-server.

    Modificar a regra de firewall padrão

    Console


    1. No Console do GCP, vá para Rede > Regras de firewall.

      ACESSAR AS REGRAS DE FIREWALL

    2. Marque a caixa de seleção default-allow-internal e, em seguida, clique em Editar.

    3. Na seção Portas e protocolos permitidos, altere tcp:1-65535 para tcp:1-3305 e clique em Salvar.

    gcloud


        gcloud compute firewall-rules update default-allow-internal --allow tcp:1-3305,udp:1-65535,icmp
    

    Se você tentar se conectar ao MySQL a partir de my-client, a solicitação acabará expirando.

    Adicionar uma nova regra de firewall

    Console


    1. No Console do GCP, adicione uma nova regra de firewall.

    2. Digite os seguintes valores:

      • Nome: mysql-remote-access

      • Filtro de origem: Instance tags

      • Tags de origem: mysql-client

      • Portas e protocolos permitidos: tcp:3306

      • Tags de destino: mysql-server

    3. Clique em Criar.

    gcloud


        gcloud compute firewall-rules create "mysql-remote-access" --allow tcp:3306 --source-tags "mysql-client" --target-tags "mysql-server"
    

    Agora você deve conseguir se conectar ao MySQL a partir de my-client.

    Limpar

    Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

    Quando terminar o tutorial do MySQL, limpe os recursos que você criou no Google Cloud Platform para não ser cobrado por eles no futuro. Nas seções a seguir, aprenda a excluir e desativar esses recursos.

    Exclua o projeto

    O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

    Para excluir o projeto:

    1. No Console do GCP, acesse a página Gerenciar recursos.

      Acessar a página Gerenciar recursos

    2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
    3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

    Excluir instâncias

    Para excluir uma instância do Compute Engine:

    1. No Console do GCP, acesse a página Instâncias de VMs.

      Acessar a página "Instâncias de VMs"

    2. Marque a caixa de seleção da sua instância my-server.
    3. Clique em Excluir para excluir a instância.

    A seguir

    • Para ver aplicativos mais complexos que usam o MySQL, consulte a grande variedade de pilhas de desenvolvimento que usam esse banco de dados no Marketplace do Google Cloud Platform.

    • Caso seus requisitos incluam alta disponibilidade e dimensionamento, instale o MySQL Cluster no Compute Engine. O MySQL Cluster fornece alta disponibilidade e dimensionamento por meio de cluster sem compartilhamento e auto-fragmentado. O Marketplace do GCP fornece uma opção click-to-deploy do Percona, uma solução de código aberto para geração de cluster no MySQL.

    • Outra solução de código aberto para dimensionamento do MySQL é o Vitess, que veicula todo o tráfego de banco de dados do YouTube desde 2011. O Vitess é adequado para aplicativos executados em contêineres. Para mais informações sobre como usar o Vitess em um ambiente em contêineres, consulte Executar o Vitess no Kubernetes.

    • Para mais informações sobre o MySQL, consulte a documentação oficial do MySQL.

    • Conheça outros recursos do Google Cloud Platform. Veja nossos tutoriais.