Usar um arquivo dump para configurar a replicação de bancos de dados externos

Esta página descreve o processo de configuração da replicação quando você tem um arquivo dump criado a partir do servidor externo.

É necessário concluir todas as etapas nesta página. Quando terminar, você pode administrar e monitorar a instância de representação de origem da mesma maneira que faria com qualquer outra instância do Cloud SQL.

Antes de começar

Antes de começar, configure o servidor externo, crie a instância de representação de origem e configure o Cloud SQL réplica.

Atualizar permissões para o usuário da replicação

O usuário de replicação no servidor externo está configurado para aceitar conexões de qualquer host (%). Atualize essa conta de usuário para que ela seja usada somente com a réplica do Cloud SQL. Abra um terminal no servidor externo e digite estes comandos:

Cliente MySQL

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'GCP_USERNAME'@'HOST';
    FLUSH PRIVILEGES;

exemplo

    UPDATE mysql.user
      SET Host='192.0.2.0'
      WHERE Host='%'
      AND User='replicationUser';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
Propriedade Descrição
NEW_HOST Especifique o IP de saída da réplica do Cloud SQL.
OLD_HOST O valor atual atribuído a Host que você quer alterar.
USERNAME A conta do usuário de replicação no servidor externo.
GCP_USERNAME O nome de usuário da conta de usuário do Google Cloud Platform (GCP).
HOST Nome do host da conta de usuário do Google Cloud Platform (GCP).

Verificar as configurações de replicação

Após a conclusão da configuração, verifique se a réplica do Cloud SQL pode ser replicada do servidor externo.

Primeiro, verifique se as configurações de sincronização externa estão corretas. Para fazer isso, use os comandos abaixo para verificar:

  • Conectividade entre a réplica do Cloud SQL e o servidor externo
  • Privilégios de usuário de replicação
  • Compatibilidade de versões
  • A réplica do Cloud SQL ainda não está replicando
  • Os registros binários estão ativados no servidor externo
  • Um identificador global de transação (GTID, na sigla em inglês) está ativado.

Abra um terminal e digite estes comandos para verificar se as configurações de sincronização externa estão corretas:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings

exemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
Propriedade Descrição
SYNC_MODE verifyExternalSyncSettings verifica se você pode manter a réplica do Cloud SQL e o servidor externo sincronizados após a configuração da replicação. Os modos de sincronização incluem EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE e OFFLINE.
SKIP_VERIFICATION Se é necessário pular a etapa de verificação antes de sincronizar seus dados. Recomendado somente se você já tiver verificado as configurações de replicação.
PROJECT_ID O ID do seu projeto no Google Cloud.
REPLICA_INSTANCE O código da sua réplica do Cloud SQL.

Exportar seu banco de dados para um bucket do Cloud Storage

É possível preencher uma réplica do Cloud SQL com um arquivo mysqldump localizado em um bucket do Cloud Storage. Essas condições se aplicam:

  • Use o utilitário mysqldump que acompanha o MySQL.
  • Enquanto mysqldump estiver em execução, não execute nenhuma operação DDL no servidor externo. Caso contrário, poderá haver inconsistências no arquivo de exportação.

Para exportar seu banco de dados para um bucket do Cloud Storage, siga estas etapas:

  1. No Google Cloud, crie um bucket do Cloud Storage.
  2. Abra um terminal usando um cliente que se conecta ao servidor de banco de dados externo e execute o comando a seguir.

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gcloud storage cp - gs://BUCKET/DUMP_FILENAME

exemplo

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gcloud storage cp - gs://replica-bucket/external-database.sql.gz
Propriedade Descrição
EXTERNAL_HOST O endereço IPv4 ou DNS do servidor externo.
EXTERNAL_PORT A porta do servidor externo. Se o servidor externo estiver hospedado no Cloud SQL, isso será 3306.
USERNAME O nome da conta de usuário da replicação ou da conta de usuário no servidor externo que tem permissões de leitura do banco de dados.
PASSWORD Senha do usuário de replicação.
DATABASE_LIST Lista separada por espaço com todos os bancos de dados do servidor externo, exceto os bancos de dados do sistema (sys, mysql, performance_schema e information_schema). Use o comando SHOW DATABASES MySQL para listar seus bancos de dados.
SOURCE_DATA Se você estiver usando uma versão do MySQL anterior à 8.0.26, use --master-data como o valor para esse parâmetro. Para versões do MySQL 8.0.26 ou mais recentes, defina o valor desse parâmetro como --source-data.
ADD_DROP_TABLE Se você quiser adicionar uma instrução DROP TABLE antes de cada instrução CREATE TABLE, inclua --add-drop-table.
ROUTINES Se você quiser mostrar rotinas armazenadas, como procedimentos e funções, inclua --routines na saída de bancos de dados despejados.
COMPRESS Se você quiser compactar todas as informações enviadas entre a réplica do Cloud SQL e o servidor externo, use --compress.
GZIP Se você quiser compactar ainda mais o arquivo dump, use | gzip. Se o banco de dados tiver dados que não aceitam bem a compactação, como dados binários não compactáveis ou imagens JPG, não use isso.
BUCKET O nome do bucket criado na Etapa 1 para conter o arquivo dump.
DUMP_FILENAME Um arquivo com esse nome é criado no seu bucket. Esse arquivo contém o conteúdo do banco de dados no servidor externo.

Atualize a instância de representação de origem com o caminho do arquivo do bucket do Cloud Storage

A instância de representação de origem é uma instância do Cloud SQL que representa o servidor do banco de dados de origem para a réplica do Cloud SQL. Ela é visível no console do Google Cloud e aparece da mesma forma que uma instância normal do Cloud SQL, mas não contém dados, não requer configuração ou manutenção e não afeta o faturamento.

O arquivo source.json contém informações sobre a instância de representação de origem.

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  },
  "dumpFilePath" :"DUMP_FILE_PATH"
}

exemplo

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  },
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
Propriedade Descrição
PRIMARY_INSTANCE_NAME O nome da instância do Cloud SQL associada à instância de representação de origem.
REGION_NAME O nome da região atribuída à instância de representação de origem.
DB_NAME_AND_VERSION O nome e o número da versão do banco de dados associado à instância de representação de origem.
IP_ADDRESS_AND_PORT O endereço IP e o número da porta reservados para a instância de representação de origem.
USERNAME O nome de usuário da instância de representação de origem.
PASSWORD A senha da instância de representação de origem.
DUMP_FILE_PATH O caminho do arquivo dump que contém o conteúdo do banco de dados no servidor externo.

Depois de configurar a réplica do Cloud SQL, você precisa atualizar sua instância de representação de origem com o caminho do arquivo do bucket do Cloud Storage.

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

exemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Propriedade Descrição
JSON_PATH O caminho do arquivo JSON armazenado no bucket do Cloud Storage. Esse arquivo contém dados sobre a instância de representação de origem.
PROJECT_ID O ID do seu projeto no Google Cloud.
SOURCE_REPRESENTATION_INSTANCE O nome da instância de representação de origem.

Iniciar replicação no servidor externo

Depois de verificar se é possível replicar usando o servidor externo, você estará pronto para executar a replicação.

Durante o processo de importação inicial, não execute nenhuma operação DDL no servidor externo. Isso pode causar inconsistências durante a importação. Após a conclusão do processo de importação, a réplica usará os registros binários no servidor externo para alcançar o estado atual desse servidor.

Abra um terminal, faça login usando gcloud e digite o comando curl para replicar a partir do servidor externo.

REST

  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{
           "syncMode": "SYNC_MODE",
           "skipVerification": "SKIP_VERIFICATION"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync

exemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "syncMode": "online",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Propriedade Descrição
SYNC_MODE Verifica se é possível manter a réplica do Cloud SQL e o servidor externo sincronizados após a configuração da replicação.
SKIP_VERIFICATION Se é necessário pular a etapa de verificação antes de sincronizar seus dados. Recomendado somente se você já tiver verificado as configurações de replicação.
PROJECT_ID O ID do seu projeto no Google Cloud.
REPLICA_INSTANCE O código da sua réplica do Cloud SQL.

Limpar o armazenamento

Se você tiver replicado com um arquivo em um bucket, remova esse arquivo e o bucket. Consulte a documentação do Cloud Storage referente a exclusão de objetos e exclusão de buckets.

Continuar a replicação

Depois de iniciar a replicação a partir do servidor externo, é necessário monitorar a replicação e concluir a migração. Para saber mais, consulte Como monitorar a replicação.

Resolver problemas

Problema Solução de problemas
Lost connection to MySQL server during query when dumping table. A origem pode ter ficado indisponível ou o dump continha pacotes muito grandes.

Verifique se a instância principal externa está disponível para conexão. Também é possível modificar os valores das sinalizações net_read_timeout e net_write_timeout na instância de origem para interromper o erro. Para mais informações sobre os valores permitidos para essas sinalizações, consulte Configurar sinalizações do banco de dados.

Para saber mais sobre como usar sinalizações mysqldump para migração de importação gerenciada, consulte Sinalizações de sincronização inicial permitidas e padrão

A migração inicial dos dados foi bem-sucedida, mas nenhum dado está sendo replicado. Uma possível causa raiz pode ser sinalizações de replicação definidas pelo banco de dados de origem, o que faz com que algumas ou todas as alterações do banco de dados não sejam replicadas.

Verifique se as sinalizações de replicação, como binlog-do-db, binlog-ignore-db, replicate-do-db ou replicate-ignore-db não estão definidas de maneira conflitante.

Execute o comando show master status na instância principal para ver as configurações atuais.

A migração inicial de dados foi bem-sucedida, mas a replicação de dados deixa de funcionar após um tempo. O que tentar

  • Verifique as métricas de replicação da instância de réplica na seção Cloud Monitoring do console do Google Cloud.
  • Os erros da linha de execução de E/S do MySQL ou do SQL podem ser encontrados no Cloud Logging nos arquivos mysql.err log.
  • O erro também pode ser encontrado ao se conectar à instância da réplica. Execute o comando SHOW SLAVE STATUS e verifique os seguintes campos na saída:
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full. O disco de dados da instância da réplica está cheio.

Aumente o tamanho do disco da instância de réplica. Aumente o tamanho do disco manualmente ou ative o aumento automático de armazenamento.

Analisar os registros de replicação

Ao verificar as configurações de replicação, os registros são gerados.

Para visualizar esses registros, siga estas etapas:

  1. Acesse o visualizador de registros no console do Google Cloud:

    Acessar o Visualizador de registros

  2. Selecione a réplica do Cloud SQL na lista suspensa Instância.
  3. Selecione o arquivo de registro replication-setup.log.

Se a réplica do Cloud SQL não conseguir se conectar ao servidor externo, confirme o seguinte:

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

A seguir