Como replicar de um servidor externo

Veja nesta página a descrição de uma configuração que replica dados a partir de um servidor de banco de dados de origem para réplicas de segunda geração do Cloud SQL. Essa configuração às vezes é chamada de configuração de mestre externo.

O servidor de banco de dados de origem pode ser qualquer servidor MySQL que atenda a todos os requisitos de servidor, incluindo instâncias do Cloud SQL. As instâncias hospedadas por outros provedores de nuvem também podem servir como fonte de dados, desde que atendam a todos os requisitos, incluindo o suporte a GTID.

Para informações mais detalhadas sobre essa configuração, consulte Sobre a replicação de um servidor externo.

Antes de começar

Antes de configurar a replicação a partir de um servidor externo, é necessário concluir as seguintes etapas:

  • Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  • Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  • Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  • Ativar Cloud SQL Admin API.

    Ativar a API

  • Instale e autentique a ferramenta de linha de comando gcloud.
  • Verifique se os seus servidores atendem aos requisitos para o servidor de banco de dados de origem.
  • Determine o nível de segurança necessário para as conexões entre o mestre e as réplicas e tenha os arquivos de certificado necessários.
  • Decida qual região do GCP você quer usar para conter suas réplicas do Cloud SQL.
  • Reúna as informações necessárias sobre seu servidor de banco de dados de origem:

    • endereço IPv4 externo e número da porta

      Por padrão, o MySQL usa a porta 3306.

    • conta de usuário e senha de replicação do MySQL
    • número da versão do MySQL
    • localização de todos os certificados e chaves SSL/TLS necessários, dependendo do nível de segurança selecionado
  • Esteja preparado para atualizar o firewall de rede do seu servidor de banco de dados de origem para aceitar conexões da réplica do Cloud SQL.

    Essa etapa precisa ser concluída dentro de 30 minutos após a criação da réplica.

  • Se você não for proprietário do projeto, será necessário ter o papel Storage Admin.

Requisitos para o servidor de banco de dados de origem

Antes de replicar a partir de um servidor externo para uma réplica do Cloud SQL, você precisa garantir que o servidor de banco de dados de origem atenda aos seguintes requisitos de configuração:

Processo de configuração

Para configurar a replicação de um servidor de banco de dados externo, execute as seguintes etapas:

  1. Crie um intervalo do Cloud Storage para seus dados.
  2. Exporte seus dados para o Cloud Storage.
  3. Defina a configuração de replicação.
  4. Configure o servidor de banco de dados de origem para que aceite conexões da réplica.

  5. Restrinja o acesso ao usuário de replicação do MySQL.

  6. Finalize a configuração da réplica.

  7. Confirme o status de replicação.

  8. Limpe o armazenamento.

1. Crie um intervalo do Cloud Storage para seus dados

Crie um intervalo para reter temporariamente seus dados durante o processo de exportação ou use um intervalo existente.

Para mais informações sobre como criar um intervalo, consulte Como criar intervalos de armazenamento. Para mais informações sobre o papel de administrador do Storage, consulte Papéis do IAM do Cloud Storage.

2. Exporte seus dados para o Cloud Storage

A réplica procura seus dados no Cloud Storage. Portanto, coloque uma cópia dos dados do servidor nele. Você pode continuar aceitando operações de gravação no seu servidor após a exportação. Depois que a réplica termina de importar o arquivo de despejo, é iniciado o processamento de todas as alterações que ocorreram desde que a exportação foi feita e, por fim, o mestre é alcançado.

Em uma máquina com a ferramenta gcloud instalada e conectividade de rede com o servidor MySQL, execute o seguinte comando:

mysqldump \
    -h [MASTER_IP] -P [MASTER_PORT] -u [USERNAME] -p \
    --databases [DBS]  \
    --hex-blob  --skip-triggers  --master-data=1  \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 --ignore-table [VIEW] \
    --single-transaction --set-gtid-purged=on | gzip | \
    gsutil cp - gs://[BUCKET]/[PATH_TO_DUMP]

Substitua [PROPERTIES_IN_BRACKETS] pelos seguintes valores:

Propriedade Valor
[MASTER_IP] O endereço IPv4 do servidor de banco de dados de origem.
[MASTER_PORT] A porta do servidor de banco de dados de origem.
[USERNAME] A conta do usuário de replicação do MySQL.
[PASSWORD] A senha da conta de usuário de replicação do MySQL.
[DBS] Lista separada por vírgulas de todos os bancos de dados no servidor de origem, exceto os bancos de dados do sistema (sys, mysql, performance_schema e information_schema). Use o comando SHOW DATABASES do MySQL para listar seus bancos de dados.
[VIEW] Todas as visualizações presentes nos bancos de dados que você está despejando precisam ser ignoradas. No caso de várias visualizações, use essa opção várias vezes.
[BUCKET] O nome do intervalo que você criou para reter o arquivo de exportação.
[PATH_TO_DUMP] O caminho do arquivo de exportação.

Caso seja exibido um aviso sobre despejos parciais e GTIDs, isso é esperado.

Esse comando pode se parecer com o seguinte exemplo:

mysqldump \
    -h 192.0.2.1 -P 3306 -u replicationUser \
    --databases guestbook  \
    --hex-blob  --skip-triggers  --master-data=1  \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 --ignore-table view1 --ignore-table view2 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gsutil cp - gs://export-bucket/hq-master1.sql.gz

3. Crie a configuração de replicação

Console

Esta etapa cria a réplica do Cloud SQL e a instância de representação de origem.

  1. Abra a lista de instâncias do Cloud SQL no Console do Google Cloud Platform.

    Abrir a lista de instâncias

  2. Clique em Migrar dados na barra de botões para abrir o Cloud SQL Migration Assistant.

  3. Clique em Iniciar migração.

  4. No campo Nome do banco de dados de origem, forneça um nome para a configuração de replicação no Cloud SQL.

    Esse nome é uma referência para a configuração, use qualquer nome válido de instância do Cloud SQL.

  5. Digite o endereço IP e o número da porta do seu servidor de banco de dados de origem.

  6. Informe o nome e a senha do usuário do MySQL que serão usados para a conexão de replicação.

  7. Selecione a versão do MySQL do seu servidor de banco de dados de origem.

  8. Se você estiver usando SSL/TLS para a conexão entre a réplica e o servidor de banco de dados de origem (recomendado), selecione Ativar segurança de SSL/TLS e forneça as informações do certificado de SSL/TLS para seu servidor de origem.

    Para saber mais informações sobre opções de SSL/TLS, consulte Opções de SSL/TLS.

  9. Clique em Avançar e preencha os detalhes da sua réplica.

    Para garantir que a importação aconteça da maneira mais eficiente possível, configure a réplica com armazenamento suficiente para conter o banco de dados. Dimensione o tipo de máquina de forma que ele seja semelhante ao servidor de origem.

  10. Informe o caminho do arquivo de despejo que você enviou para o Cloud Storage anteriormente.

  11. Clique em Criar para criar a réplica.

  12. Clique em Avançar.

gcloud

  1. Crie a instância de representação de origem.

    gcloud beta sql instances create [SOURCE_REPRESENTATION_NAME] \
        --region=[REGION] --database-version=[MYSQL_VERSION] \
        --source-ip-address=[SOURCE_IP] --source-port=[SOURCE_PORT]
    

    Substitua [PROPERTIES_IN_BRACKETS] pelos seguintes valores:

    Propriedade Valor
    [SOURCE_REPRESENTATION_NAME] O nome da instância de representação de origem. Use qualquer nome válido de instância do Cloud SQL.
    [REGION] A região onde você quer que suas réplicas do Cloud SQL fiquem.
    [MYSQL_VERSION] A versão do MySQL em execução no seu servidor de banco de dados de origem: MYSQL_5_6 ou MYSQL_5_7.
    [SOURCE_IP] O endereço IPv4 acessível externamente do servidor de banco de dados de origem.
    [SOURCE_PORT] A porta acessível externamente do servidor de banco de dados de origem.
  2. Crie a réplica do Cloud SQL:

    gcloud beta sql instances create [REPLICA_NAME] \
        --master-instance-name=[SOURCE_REPRESENTATION_NAME] \
        --master-username=[USERNAME] --prompt-for-master-password \
        --master-dump-file-path=gs://[BUCKET]/[PATH_TO_DUMP] \
        --master-ca-certificate-path=[SOURCE_SERVER_CA_PATH] \
        --client-certificate-path=[CLIENT_CERT_PATH] \
        --client-key-path=[PRIVATE_KEY_PATH] \
        --tier=[MACHINE_TYPE] --storage-size=[DISK_SIZE]
    

    Substitua [PROPERTIES_IN_BRACKETS] pelos seguintes valores:

    Propriedade Valor
    [REPLICA_NAME] O nome da réplica de leitura do Cloud SQL. Use qualquer nome válido de instância do Cloud SQL.
    [SOURCE_REPRESENTATION_NAME] O nome da instância de representação de origem que você criou na etapa anterior.
    [USERNAME] A conta do usuário de replicação do MySQL no servidor de banco de dados de origem.
    [BUCKET] O nome do intervalo que você criou para reter o arquivo de exportação.
    [PATH_TO_DUMP] O caminho do arquivo de exportação.
    [SOURCE_SERVER_CA_PATH] O caminho local de onde o certificado de CA do servidor de banco de dados de origem está armazenado. Necessário apenas para SSL/TLS.
    [CLIENT_CERT_PATH] O caminho local de onde o certificado do cliente está armazenado. Necessário apenas para autenticação de servidor e cliente.
    [PRIVATE_KEY_PATH] O caminho local onde o arquivo de chave privada do certificado do cliente está armazenado. Necessário apenas para autenticação de servidor e cliente.
    [MACHINE_TYPE] O tamanho da sua réplica. De modo geral, a réplica deve ter aproximadamente o mesmo tamanho que o servidor de banco de dados de origem. Se você não tiver certeza de qual tipo de máquina usar, comece com db-n1-standard-2. Você pode alterar o tamanho mais tarde, se necessário.
    [DISK_SIZE] O tamanho de armazenamento da réplica, em GB. Para ter o melhor desempenho, crie a réplica com armazenamento suficiente para conter o arquivo de importação inteiro.

cURL

1. Crie a instância de representação de origem do Cloud SQL

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "name": "[SOURCE_REPRESENTATION_NAME]",
         "region": "[REGION]",
         "databaseVersion": "[MYSQL_VERSION]",
         "onPremisesConfiguration": {
             "hostPort": "[SOURCE_SERVER_IP]:[SOURCE_SERVER_PORT]"
         }
     }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

Substitua [PROPERTIES_IN_BRACKETS] pelos seguintes valores:

Propriedade Valor
[SOURCE_REPRESENTATION_NAME] O nome da instância de representação de origem. Use qualquer nome válido de instância do Cloud SQL.
[REGION] A região onde você quer que suas réplicas do Cloud SQL fiquem.
[MYSQL_VERSION] A versão do MySQL em execução no seu servidor de banco de dados de origem: MYSQL_5_6 ou MYSQL_5_7.
[SOURCE_SERVER_IP] O endereço IPv4 acessível externamente do servidor de banco de dados de origem.
[SOURCE_SERVER_PORT] A porta acessível externamente do servidor de banco de dados de origem.
[PROJECT_ID] O código do projeto do seu projeto do GCP.

Por exemplo, se você quiser criar uma instância de representação de origem denominada hq-master1 para um servidor de banco de dados de origem com o endereço IP 192.0.2.0 aberto na porta 3306 e executando o MySQL 5.7, para réplicas do Cloud SQL no projeto MyProject e na região us-central1, precisaria usar os seguintes comandos:

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "name": "hq-master1",
         "region": "us-central1",
         "databaseVersion": "MYSQL_5_7",
         "onPremisesConfiguration": {
             "hostPort": "192.0.2.0:3306"
         }
     }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances

2. Crie a réplica do Cloud SQL

Nesta etapa, você cria uma réplica de leitura do Cloud SQL usando o servidor de representação de origem para representar esse servidor e fornece a réplica com os dados carregados no Cloud Storage na etapa anterior.

Para fazer essa chamada de API, é necessário fornecer informações confidenciais. Portanto, você deve usar um arquivo JSON para transmitir seus dados ao cURL em vez de fornecê-los na linha de comando.

Crie o arquivo de dados:

{
    "replicaConfiguration": {
        "mysqlReplicaConfiguration": {
            "username": "[USERNAME]",
            "password": "[PASSWORD]",
            "dumpFilePath": "gs://[BUCKET]/[PATH_TO_DUMP]",
            "caCertificate": "[SOURCE_SERVER_CA]",
            "clientCertificate": "[CLIENT_CERT]",
            "clientKey": "[PRIVATE_KEY]"
        }
     },
     "settings": {
         "tier": "[MACHINE_TYPE]",
         "dataDiskSizeGb": "[DISK_SIZE]"
     },
     "masterInstanceName": "[SOURCE_REPRESENTATION_NAME]",
     "region": "[REGION]",
     "databaseVersion": "[MYSQL_VERSION]",
     "name": "[REPLICA_NAME]"
}

Substitua [PROPERTIES_IN_BRACKETS] pelos seguintes valores:

Propriedade Valor
[USERNAME] A conta do usuário de replicação do MySQL no servidor de banco de dados de origem.
[PASSWORD] A senha da conta de usuário de replicação do MySQL.
[BUCKET] O nome do intervalo que você criou para reter o arquivo de exportação.
[PATH_TO_DUMP] O caminho do arquivo de exportação.
[SOURCE_SERVER_CA] O certificado de CA do servidor de banco de dados de origem. Obrigatório apenas para SSL/TLS. Cole o certificado no corpo da solicitação.
[CLIENT_CERT] O certificado do cliente. Necessário apenas para autenticação de servidor e cliente. Cole o certificado no corpo da solicitação.
[PRIVATE_KEY] O arquivo de chave privada para o certificado do cliente. Necessário apenas para autenticação de servidor e cliente. Cole a chave no corpo da solicitação.
[MACHINE_TYPE] O tamanho da sua réplica. De modo geral, a réplica deve ter aproximadamente o mesmo tamanho que o servidor de banco de dados de origem. Se você não tiver certeza de qual tipo de máquina usar, comece com db-n1-standard-2. Você pode alterar o tamanho mais tarde, se necessário.
[DISK_SIZE] O tamanho de armazenamento da réplica, em GB. Para ter o melhor desempenho, crie a réplica com armazenamento suficiente para conter o arquivo de importação inteiro.
[SOURCE_REPRESENTATION_NAME] O nome da instância de representação de origem que você criou anteriormente.
[REGION] A região onde você criou a instância de representação de origem. As réplicas de leitura precisam estar na mesma região que a instância de representação de origem.
[MYSQL_VERSION] A versão do MySQL em execução no seu servidor de banco de dados de origem: MYSQL_5_6 ou MYSQL_5_7.
[REPLICA_NAME] O nome da réplica de leitura do Cloud SQL. Use qualquer nome válido de instância do Cloud SQL.

Na linha de comando, chame a API:

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @[PATH_TO_DATA_FILE] \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

Para a instância de representação de origem e o intervalo que criamos anteriormente, o arquivo de dados data.json pode se parecer com o seguinte exemplo:

{
    "replicaConfiguration": {
        "mysqlReplicaConfiguration": {
            "username": "replicationUser",
            "password": "486#@%*@",
            "dumpFilePath": "gs://export-bucket/hq-master1.sql.gz",
            "caCertificate": "[SOURCE_SERVER_CA]",
            "clientCertificate": "[CLIENT_CERT]",
            "clientKey": "[PRIVATE_KEY]"
        }
    },
    "settings": {
        "tier": "db-n1-standard-4",
        "dataDiskSizeGb": "100"
    },
    "masterInstanceName": "hq-master1",
    "region": "us-central1",
    "databaseVersion": "MYSQL_5_7",
    "name": "hq-master1-replica1"
}

E o comando cURL seria algo assim:

curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./data.json
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances

Quando a réplica de leitura puder acessar o arquivo de despejo, ela iniciará o processo de importação. A duração do processo de importação depende do tamanho do arquivo de despejo, do tipo de máquina de réplica e do esquema do banco de dados. Como uma estimativa geral, espere que a réplica importe de 25 a 50 GB por hora.

A réplica permanece no estado PENDING_CREATE até que o processo de importação seja concluído. Nesse momento, a réplica muda para o estado RUNNABLE.

4. Configure o servidor do banco de dados de origem para aceitar conexões da réplica

A réplica precisa se conectar ao servidor de banco de dados de origem para que a replicação seja bem-sucedida. Se o servidor de banco de dados de origem estiver protegido por firewall ou alguma outra restrição de rede, você deverá habilitar o acesso à rede para a réplica, usando o endereço IP OUTGOING da réplica. Observe que esse não é o endereço IP exibido na listagem principal da réplica no Console do GCP. Se você quiser recuperar o endereço IP OUTGOING, passe o cursor sobre a dica de ferramenta Mais informações ou use o comando gcloud abaixo.

  1. Recupere os endereços IP da réplica de leitura:

    gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"
    
  2. Configure o firewall da rede do servidor de banco de dados origem para aceitar conexões a partir do endereço IP OUTGOING.
  3. Confirme se a réplica foi conectada com êxito ao servidor do banco de dados de origem.

    1. O ícone da réplica na página de listagem de instâncias não deve mais estar girando e deve estar verde.
    2. Acesse o visualizador de registros no Console do Google Cloud Platform.

      Acessar o visualizador de registros

    3. Selecione a réplica no menu suspenso Instância.
    4. Selecione o arquivo de log de replication-setup.log.

      Se a réplica não conseguir se conectar ao servidor de banco de dados de origem, confirme os seguintes itens:

      • Qualquer firewall no servidor do banco de dados de origem está configurado para permitir conexões a partir do endereço IP OUTGOING da réplica.
      • Sua configuração SSL/TLS está correta.
      • Seu usuário, host e senha de replicação estão corretos.

5. Restrinja o acesso ao usuário de replicação do MySQL

Esta etapa é opcional, mas recomendada por questões de segurança.

O usuário de replicação do MySQL no servidor de banco de dados de origem está configurado para aceitar conexões de qualquer host (%). Atualize essa conta de usuário para que aceite conexões somente do endereço IP OUTGOING da réplica:

    UPDATE mysql.user SET Host='[OUTGOING_IP]' WHERE Host='%' AND User='[USERNAME]';
    FLUSH PRIVILEGES;

6. Finalize a configuração da réplica

  1. Configure uma conta de usuário na réplica.

    Você pode fazer isso usando o Console do Google Cloud Platform, a ferramenta de linha de comando gcloud ou a API Cloud SQL. No entanto, não é possível usar o cliente mysql. Para mais informações sobre usuários MySQL, consulte Usuários MySQL.

    Para criar um usuário com o Console do GCP:

    1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud Platform.
      Acessar a página "Instâncias do Cloud SQL"
    2. Clique no nome da instância para abrir a página Detalhes da instância.
    3. Selecione a guia Usuários.
    4. Clique em Criar conta de usuário.
    5. Na caixa de diálogo Criar conta de usuário, especifique os detalhes do seu usuário.
    6. Clique em Criar
  2. Autorize o acesso à réplica a partir de qualquer cliente que você pretenda usar para se conectar à réplica usando endereços IP.

    Para ver as instruções, consulte Como adicionar um endereço ou intervalo de endereços autorizados. Para se conectar à réplica, use o endereço IP PRIMARY da réplica. Esse endereço IP é exibido no Console do GCP.

    Você também pode usar qualquer outro método de conexão para se conectar à réplica.

7. Confirme o status de replicação

Quando a réplica termina de importar o arquivo de despejo, ela se conecta ao servidor local e aplica todas as atualizações feitas após a exportação. Você pode confirmar o status na página de listagem de instâncias do Console do GCP.

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud Platform.
    Acessar a página Instâncias do Cloud SQL
  2. Clique em Mostrar painel de informações e selecione Atraso de replicação na lista suspensa de métricas.

    O atraso de replicação deve ser 0 ou próximo disso. Caso não seja, será necessário tomar medidas para resolver esse problema.

8. Limpe seu armazenamento

  1. Exclua o arquivo de exportação:

    gsutil rm gs://[BUCKET]/[PATH_TO_DUMP]
    
  2. Caso você não precise mais do intervalo, exclua-o:

    gsutil rm -r gs://[BUCKET]
    

Para mais informações, consulte a documentação do Cloud Storage referente a exclusão de objetos e exclusão de intervalos.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Cloud SQL para MySQL