Use um ficheiro de despejo para configurar a replicação a partir de bases de dados externas

Esta página descreve o processo de configuração da replicação quando tem um ficheiro de despejo que criou a partir do seu servidor externo.

Tem de concluir todos os passos nesta página. Quando terminar, pode administrar e monitorizar a instância de representação de origem da mesma forma que faria com qualquer outra instância do Cloud SQL.

Antes de começar

Antes de começar, deve ter configurado o servidor externo, criado a instância de representação de origem e configurado a réplica do Cloud SQL.

Atualize as autorizações do utilizador de replicação

O utilizador da replicação no servidor externo está configurado para aceitar ligações de qualquer anfitrião (%). Deve atualizar esta conta de utilizador para que só possa ser usada com a réplica do Cloud SQL. Abra um terminal no servidor externo e introduza 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 quer alterar.
USERNAME A conta de utilizador de replicação no servidor externo.
GCP_USERNAME O nome de utilizador da conta de utilizador da Trusted Cloud by S3NS plataforma (GCP).
HOST O nome do anfitrião da conta de utilizador da Trusted Cloud by S3NS plataforma (GCP).

Valide as definições de replicação

Após a conclusão da configuração, certifique-se de que a réplica do Cloud SQL consegue replicar a partir do servidor externo.

Primeiro, certifique-se de que as definições de sincronização externa estão corretas. Para o fazer, use os comandos abaixo para validar:

  • Conetividade entre a réplica do Cloud SQL e o servidor externo
  • Privilégios do utilizador de replicação
  • Compatibilidade de versões
  • A réplica do Cloud SQL ainda não está a ser replicada
  • Os registos binários estão ativados no servidor externo
  • Um identificador de transação global (GTID) está ativado

Abra um terminal e introduza estes comandos para verificar se as definiçõ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 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 deve ou não ignorar o passo de validação incorporado antes de sincronizar os seus dados. Recomendado apenas se já tiver validado as definições de replicação.
PROJECT_ID O ID do seu projeto em Trusted Cloud.
REPLICA_INSTANCE O ID da sua réplica do Cloud SQL.

Exporte a sua base de dados para um contentor do Cloud Storage

Pode preencher uma réplica do Cloud SQL com um ficheiro mysqldump localizado num contentor do Cloud Storage. Aplicam-se as seguintes condições:

  • Tem de usar o utilitário mysqldump incluído no MySQL.
  • Enquanto o mysqldump estiver em execução, não realize nenhuma operação DDL no servidor externo. Esta ação pode causar inconsistências no ficheiro de exportação.

Para exportar a sua base de dados para um contentor do Cloud Storage, siga estes passos:

  1. No Trusted Cloud, crie um contentor do Cloud Storage.
  2. Abra um terminal com um cliente que se ligue ao servidor de base de dados externo e execute o seguinte comando.

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 alojado no Cloud SQL, esta é 3306.
USERNAME O nome da conta de utilizador de replicação ou da conta de utilizador no servidor externo que tem autorizações de leitura da base de dados.
PASSWORD Palavra-passe do utilizador de replicação.
DATABASE_LIST Lista separada por espaços de todas as bases de dados no servidor externo, exceto as bases de dados do sistema (sys, mysql, performance_schema e information_schema). Use o comando SHOW DATABASES MySQL para listar as suas bases de dados.
SOURCE_DATA Se estiver a usar uma versão do MySQL anterior à 8.0.26, use --master-data como valor para este parâmetro. Para versões do MySQL 8.0.26 ou superiores, defina o valor deste parâmetro como --source-data.
ADD_DROP_TABLE Se quiser adicionar uma declaração DROP TABLE antes de cada declaração CREATE TABLE, inclua --add-drop-table.
ROUTINES Se quiser mostrar rotinas armazenadas, como procedimentos e funções, na saída de bases de dados transferidas, inclua --routines.
COMPRESS Se quiser comprimir todas as informações enviadas entre a réplica do Cloud SQL e o servidor externo, use --compress.
GZIP Se quiser comprimir ainda mais o ficheiro de despejo, use | gzip. Se a sua base de dados contiver dados que não são bem comprimidos, como dados binários não comprimíveis ou imagens JPG, não use esta opção.
BUCKET O nome do contentor que criou no passo 1 para conter o ficheiro de despejo.
DUMP_FILENAME É criado um ficheiro com este nome no seu contentor. Este ficheiro contém o conteúdo da base de dados no seu servidor externo.

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

A instância de representação de origem é uma instância do Cloud SQL que representa o servidor de base de dados de origem para a réplica do Cloud SQL. É visível na Trusted Cloud by S3NS consola e aparece da mesma forma que uma instância normal do Cloud SQL, mas não contém dados, não requer configuração nem manutenção e não afeta a faturação.

O ficheiro 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 da origem.
REGION_NAME O nome da região atribuída à instância de representação da origem.
DB_NAME_AND_VERSION O nome e o número da versão da base de dados associada à instância de representação da origem.
IP_ADDRESS_AND_PORT O endereço IP e o número da porta reservados para a instância de representação da origem.
USERNAME O nome de utilizador da instância de representação da origem.
PASSWORD A palavra-passe da instância de representação da origem.
DUMP_FILE_PATH O caminho do ficheiro de despejo que contém o conteúdo da base de dados no seu servidor externo.

Depois de configurar a réplica do Cloud SQL, tem de atualizar a instância de representação de origem com o caminho do ficheiro do contentor 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 ficheiro JSON armazenado no contentor do Cloud Storage. Este ficheiro contém dados sobre a instância de representação da origem.
PROJECT_ID O ID do seu projeto em Trusted Cloud.
SOURCE_REPRESENTATION_INSTANCE O nome da instância de representação da origem.

Inicie a replicação no servidor externo

Depois de confirmar que consegue replicar a partir do servidor externo, está tudo pronto para realizar a replicação.

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

Abra um terminal, inicie sessão com gcloud e, em seguida, introduza o comando curl para fazer a replicação 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 consegue manter a réplica do Cloud SQL e o servidor externo sincronizados após a configuração da replicação.
SKIP_VERIFICATION Se deve ou não ignorar o passo de validação incorporado antes de sincronizar os seus dados. Recomendado apenas se já tiver validado as definições de replicação.
PROJECT_ID O ID do seu projeto em Trusted Cloud.
REPLICA_INSTANCE O ID da sua réplica do Cloud SQL.

Limpe o seu armazenamento

Se fez a replicação a partir de um ficheiro num contentor, pode remover este ficheiro e o contentor. Consulte a documentação do Cloud Storage para saber como eliminar objetos e eliminar contentores.

Continuar com a replicação

Depois de iniciar a replicação a partir do servidor externo, tem de monitorizar a replicação e, em seguida, concluir a migração. Para saber mais, consulte o artigo Monitorizar a replicação.

Resolver problemas

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

Certifique-se de que o dispositivo principal externo está disponível para ligação. Também pode modificar os valores das flags net_read_timeout e net_write_timeout na instância de origem para parar o erro. Para mais informações sobre os valores permitidos para estas flags, consulte o artigo Configure flags da base de dados.

Para saber mais sobre a utilização de flags mysqldumppara a migração de importações geridas, consulte o artigo Flags de sincronização inicial permitidas e predefinidas

A migração de dados inicial foi bem-sucedida, mas não está a ser feita a replicação de dados. Uma possível causa principal pode ser a base de dados de origem ter definido flags de replicação que resultam na não replicação de algumas ou todas as alterações da base de dados.

Certifique-se de que as flags de replicação, como binlog-do-db, binlog-ignore-db, replicate-do-db ou replicate-ignore-db, não estão definidas de forma conflituosa.

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

A migração de dados inicial foi bem-sucedida, mas a replicação de dados deixa de funcionar após algum tempo. Opções que pode testar:

  • Verifique as métricas de replicação da instância da réplica na secção do Cloud Monitoring da Trusted Cloud consola.
  • Pode encontrar os erros do thread de E/S do MySQL ou do thread SQL em Cloud Logging nos ficheiros mysql.err log.
  • O erro também pode ser encontrado quando se liga à 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 da réplica. Pode aumentar manualmente o tamanho do disco ou ativar o aumento automático do armazenamento.

Reveja os registos de replicação

Quando valida as definições de replicação, são gerados registos.

Pode ver estes registos através dos seguintes passos:

  1. Aceda ao visualizador de registos na Trusted Cloud consola.

    Aceda ao visualizador de registos

  2. Selecione a réplica do Cloud SQL no menu pendente Instância.
  3. Selecione o ficheiro de registo replication-setup.log.

Se a réplica do Cloud SQL não conseguir estabelecer ligação ao servidor externo, confirme o seguinte:

  • Qualquer firewall no servidor externo está configurada para permitir ligações a partir do endereço IP de saída da réplica do Cloud SQL.
  • A sua configuração SSL/TLS está correta.
  • O utilizador, o anfitrião e a palavra-passe da replicação estão corretos.

O que se segue?