Como migrar de um servidor externo para o Cloud SQL (v1.1)

Nesta página, descrevemos como replicar dados de um servidor externo para uma réplica do Cloud SQL. É possível replicar dados com um dump gerenciado ou fazendo upload deles com base em um arquivo dump. Mostraremos como fazer isso com um servidor externo que pode ser conectado com o endereço IP ou endereço DNS.

.

Uma alternativa aos procedimentos descritos nesta página é o Database Migration Service, que oferece replicação contínua ou migração única de banco de dados de um servidor de banco de dados de origem para o Cloud SQL.

Antes de começar

Terminologia

  • Servidor de banco de dados de origem. O servidor MySQL que você gerencia. Também conhecido como servidor externo, externo primário, servidor de banco de dados de origem ou servidor de banco de dados externo. Se você estiver usando o Amazon Relational Database Service (RDS), isso conterá seu servidor de banco de dados de origem.

  • Instância de representação de origem. Uma instância do Cloud SQL que representa o servidor de 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. Contém a configuração do servidor de banco de dados de origem.

  • Réplica do Cloud SQL. A instância do Cloud SQL que é replicada do servidor de banco de dados de origem. Também conhecida como réplica de leitura do mestre externo.

  • Replicação da conta de usuário. A conta de usuário do MySQL no servidor de banco de dados de origem com permissões suficientes para permitir a replicação entre o servidor de banco de dados de origem e o servidor do Google Cloud.

  • Dump gerenciado. O processo de cópia de dados diretamente do servidor de banco de dados de origem para a réplica do Cloud SQL. Nessa situação, o Cloud SQL se conecta ao servidor de banco de dados de origem usando a conta de usuário de replicação e executa mysqldump diretamente no servidor de banco de dados de origem para importar dados para a réplica do Cloud SQL.

Lista de verificação do servidor de banco de dados de origem

Tudo

  • Verifique se MySQL 5.5, 5.6, 5.7 ou 8.0 está instalado em seu servidor de banco de dados de origem. As edições MySQL Community Edition, Cloud SQL MySQL e MySQL no Amazon RDS são compatíveis.

    • Se o MySQL 8.0 estiver instalado no servidor de banco de dados de origem, será possível usar o Cloud SQL MySQL 8.0 com a réplica do Cloud SQL.
    • Se o MySQL 5.5 estiver instalado no servidor de banco de dados de origem, o GTID não é compatível.
  • Verifique se os registros binários estão ativados e se:

  • Anote se o servidor de banco de dados de origem tem o GTID ativado. Isso afetará as etapas necessárias para configurar a replicação.

  • Observe se o servidor de banco de dados de origem tem permissões globais de bloqueio de leitura. Isso afetará as etapas necessárias para configurar a replicação.

  • Se a réplica do Cloud SQL for usar um IP privado, o firewall do servidor do banco de dados de origem precisará ser configurado para permitir todo o intervalo de IP interno alocado para a conexão particular de serviços da rede VPC que a réplica do Cloud SQL usará como o campo privateNetwork das suas configurações ipConfiguration.

    • Para encontrar o intervalo de IP interno no console:
    • Acesse a página "Redes VPC" no Console do Google Cloud.
    • Selecione a rede VPC que você quer usar.
    • Selecione a guia Conexão de serviço privado.
  • Se o banco de dados de origem tiver cláusulas DEFINER (visualizações, eventos, acionadores ou procedimentos armazenados), dependendo da ordem em que essas instruções sejam executadas, a replicação poderá falhar. Saiba mais sobre o uso de DEFINER e as possíveis soluções alternativas no Cloud SQL.

Amazon RDS

  • Certifique-se de que o MySQL para Amazon RDS esteja instalado em seu servidor de banco de dados de origem.

  • Um servidor de banco de dados de origem que usa o Amazon RDS não é compatível com a GTID na maioria das situações, mas é compatível com o GTID para MySQL 5.7.

  • Um servidor de banco de dados de origem que usa o Amazon RDS não é compatível com permissões globais de bloqueio de leitura.

Configurar a replicação

É possível iniciar a replicação de um arquivo do Cloud Storage ou de um dump gerenciado.

Ao definir as configurações de replicação, também é possível decidir se a réplica do Cloud SQL permanecerá em sincronia com o servidor de banco de dados de origem após a conclusão da importação inicial. Uma réplica que deveria permanecer sincronizada está on-line. Uma réplica que é atualizada apenas uma vez está off-line.

On-line e arquivo

Para configurar esse tipo de replicação, o servidor de banco de dados de origem precisa ter pelo menos um dos seguintes itens: permissões GTID ativadas ou de bloqueio de leitura global.

  1. Configure um projeto no Google Cloud.
  2. Instale o SDK do Google Cloud para o servidor de banco de dados de origem.
  3. Crie o usuário de replicação no servidor de banco de dados de origem.
  4. Exporte dados do servidor de banco de dados de origem para um bucket do Google Cloud.
  5. Configure a instância de representação de origem.
  6. Configure a réplica do Cloud SQL.
  7. Verifique se as instâncias foram adicionadas corretamente ao Cloud SQL.
  8. Adicione usuários à réplica do Cloud SQL.
  9. Atualize as permissões do usuário de replicação no servidor de banco de dados de origem.
  10. Permita conexões de entrada no servidor de banco de dados de origem.
  11. Verifique suas configurações de replicação.
  12. Verifique os registros de replicação (opcional).
  13. Replique os dados.
  14. Confirme o status de replicação.
  15. Limpe o armazenamento.

On-line e dump gerenciado

  1. Configure um projeto no Google Cloud.
  2. Instale o SDK do Google Cloud para o servidor de banco de dados de origem.
  3. Crie o usuário de replicação no servidor de banco de dados de origem.
  4. Configure a instância de representação de origem.
  5. Configure a réplica do Cloud SQL.
  6. Verifique se as instâncias foram adicionadas corretamente ao Cloud SQL.
  7. Adicione usuários à réplica do Cloud SQL.
  8. Atualize as permissões do usuário de replicação no servidor de banco de dados de origem.
  9. Permita conexões de entrada no servidor de banco de dados de origem.
  10. Verifique suas configurações de replicação.
  11. Verifique os registros de replicação (opcional).
  12. Replique os dados.
  13. Confirme o status de replicação.

Off-line e arquivo

  1. Configure um projeto no Google Cloud.
  2. Instale o SDK do Google Cloud para o servidor de banco de dados de origem.
  3. Crie o usuário de replicação no servidor de banco de dados de origem.
  4. Exporte dados do servidor de banco de dados de origem para um bucket do Google Cloud.
  5. Configure a instância de representação de origem.
  6. Configure a réplica do Cloud SQL.
  7. Verifique se as instâncias foram adicionadas corretamente ao Cloud SQL.
  8. Adicione usuários à réplica do Cloud SQL.
  9. Atualize as permissões do usuário de replicação no servidor de banco de dados de origem.
  10. Permita conexões de entrada no servidor de banco de dados de origem.
  11. Replique os dados.
  12. Confirme o status de replicação.
  13. Limpe o armazenamento.

Off-line e dump gerenciado

  1. Configure um projeto no Google Cloud.
  2. Instale o SDK do Google Cloud para o servidor de banco de dados de origem.
  3. Crie o usuário de replicação no servidor de banco de dados de origem.
  4. Configure a instância de representação de origem.
  5. Configure a réplica do Cloud SQL.
  6. Verifique se as instâncias foram adicionadas corretamente ao Cloud SQL.
  7. Adicione usuários à réplica do Cloud SQL.
  8. Atualize as permissões do usuário de replicação no servidor de banco de dados de origem.
  9. Permita conexões de entrada no servidor de banco de dados de origem.
  10. Verifique suas configurações de replicação.
  11. Verifique os registros de replicação (opcional).
  12. Replique os dados.

Procedimentos de configuração

Com base nas suas opções de replicação, siga as etapas relevantes abaixo.

Configure um projeto do Google Cloud

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative a API Cloud SQL Admin.

    Ative a API

  5. Verifique se você tem os papéis "Administrador" do Cloud SQL, "Administrador do Storage" e "Leitor do Compute" na conta de usuário.

    Acessar a página IAM

  6. Ative a API Cloud SQL Admin.

    Ative a API

Instalar o SDK do Google Cloud

Para configurar a replicação, instale o SDK do Google Cloud para o servidor de banco de dados de origem. Convém instalá-la no servidor de banco de dados de origem se ele ainda não estiver instalado em outro lugar.

Criar uma conta de usuário de replicação

Uma conta de usuário do MySQL com o privilégio REPLICATION_SLAVE precisa existir no servidor de banco de dados de origem. Essa conta de usuário só precisa ser usada para gerenciar a replicação. Para adicionar uma conta de usuário de replicação, abra um terminal no servidor de banco de dados de origem e insira estes comandos do MySQL:

MySQL

// Online migration with Cloud Storage file:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Online migration with managed dump and GTID enabled:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Online migration with managed dump and GTID disabled:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Offline migration with managed dump:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT SELECT, SHOW VIEW ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

exemplo

CREATE USER 'bluewing'@'%' IDENTIFIED BY '8*&fwwd';
GRANT REPLICATION SLAVE ON *.* TO 'bluewing'@'%';
FLUSH PRIVILEGES;
Propriedade Valor
[USERNAME] A conta do usuário de replicação no servidor de banco de dados de origem.
[PASSWORD] A senha da conta de usuário da replicação.
[HOST] Defina como % para aceitar todas as conexões de qualquer host. Em uma etapa posterior, isso será alterado para aceitar apenas conexões da réplica do Cloud SQL.

Exportar dados para um bucket do Google Cloud

É possível preencher uma réplica do Cloud SQL com dados de um bucket do Google Cloud. 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 de banco de dados de origem. Caso contrário, poderá haver inconsistências no arquivo de exportação.

Para fazer o upload dos dados em um bucket, siga estas etapas:

  1. No Google Cloud, crie um bucket.
  2. Abra um terminal no servidor do banco de dados de origem e execute o comando abaixo.

mysqldump

mysqldump \
    --host=[SOURCE_HOST] \
    --port=[SOURCE_PORT] \
    --user=[USERNAME]\
    --password \
    [DATABASE_LIST]  \
    --hex-blob \
    [SOURCE_DATA]  \
    --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction \
    [GTID_PURGED] \
    [ADD_DROP_TABLE] \
    [ROUTINES] \
    [COMPRESS] \
    [GZIP] \
    | gsutil 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 \
    | gsutil cp - gs://replica-bucket/source-database.sql.gz
Propriedade Valor
[SOURCE_HOST] O endereço IPv4 ou DNS do servidor do banco de dados de origem.
[SOURCE_PORT] A porta do servidor de banco de dados de origem. Se o servidor de banco de dados de origem 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 de banco de dados de origem que tem permissões de leitura do banco de dados.
[DATABASE_LIST] Lista separada por espaço com todos os bancos de dados do servidor de origem, 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 o servidor de banco de dados de origem não for compatível com GTID e você tiver permissão para acessar o bloqueio de leitura global nele, use --master-data=1. Caso contrário, não use essa propriedade.
[GTID_PURGED] Se o servidor de banco de dados de origem for compatível com GTID, use --set-gtid-purged=on. Caso contrário, não use essa propriedade.
[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 de banco de dados de origem, 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 que conterá o arquivo dump.
[DUMP_FILENAME] Um arquivo com esse nome é criado no seu bucket. Esse arquivo conterá o conteúdo do banco de dados no servidor de banco de dados de origem.

Configurar uma instância de representação de origem

A instância de representação de origem faz referência ao servidor de banco de dados de origem. Ele contém apenas os dados da solicitação do servidor de banco de dados de origem. Nesta etapa, você criará os dados da solicitação e os usará em um comando cURL que cria a instância de representação de origem no Cloud SQL.

Criar os dados da solicitação

Os dados da solicitação contêm informações básicas sobre o servidor de banco de dados de origem no formato JSON. Os dados da solicitação podem ser configurados para uma réplica do Cloud SQL em uma rede pública ou privada e precisam conter estas informações:

source.json

{
  "name": "[SOURCE_NAME]",
  "region": "[REGION]",
  "databaseVersion": "[MYSQL_VERSION]",
  "onPremisesConfiguration": {
    "hostPort": "[SOURCE_HOST]",
    "username": "[USERNAME]",
    "password": "[PASSWORD]",
    "dumpFilePath": "gs://[BUCKET]/[DUMP_FILE]",
    "caCertificate": "[SOURCE_CERT]",
    "clientCertificate": "[CLIENT_CERT]",
    "clientKey": "[CLIENT_KEY]"
  }
}

exemplo de dump gerenciado

// example of source.json for source database server that
// - initiates replication from a Cloud SQL managed dump
// - does not use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}

exemplo de arquivo dump

// example of source.json for source database server that
// - initiates replication from a file
// - uses SSL/TSL

{
  "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",
    "caCertificate": "content of your certificate",
    "clientCertificate": "content of your certificate",
    "clientKey": "content of your client key"
  }
}
Campos opcionais: Observações
dumpFilePath Só inclua se você estiver configurando a replicação com um arquivo dump que existe em um bucket do Cloud SQL.
caCertificate Inclua apenas se SSL/TLS for usado no servidor de banco de dados de origem.
clientCertificate Inclua apenas se SSL/TLS for usado no servidor de banco de dados de origem.
clientKey Inclua apenas se SSL/TLS for usado no servidor de banco de dados de origem.
Propriedade Valor
[SOURCE_NAME] O nome da instância de representação de origem a ser criada.
[REGION] A região onde você quer que a instância de representação de origem resida.
[MYSQL_VERSION] A versão do MySQL em execução no seu servidor de banco de dados de origem. As opções são MYSQL_5_5, MYSQL_5_6, MYSQL_5_7 ou MYSQL_8_0.
[SOURCE HOST] O endereço IPv4 e a porta do servidor de banco de dados de origem ou do endereço DNS do servidor de banco de dados de origem. Se você usar um endereço DNS, ele poderá conter até 60 caracteres. Se o servidor de banco de dados de origem estiver hospedado no Cloud SQL, a porta será 3306.
[USERNAME] A conta do usuário de replicação no servidor de banco de dados de origem.
[PASSWORD] A senha da conta de usuário da replicação.
[BUCKET] O nome do bucket que contém o arquivo dump.
[DUMP_FILE] Um arquivo no bucket que contém os dados do servidor de banco de dados de origem.
[CLIENT_CA_CERT] O certificado de CA no servidor de origem.
[CLIENT_CERT] O certificado do cliente no servidor de origem. Necessário apenas para autenticação servidor-cliente.
[CLIENT_KEY] O arquivo de chave privada do certificado do cliente no servidor de banco de dados de origem. Necessário apenas para autenticação servidor-cliente.

Criar uma instância de representação de origem

Antes de concluir esta etapa, crie um arquivo JSON que contenha seus dados de solicitação de origem. Em seguida, abra um terminal e use estes comandos para criar a instância de representação de origem no Cloud SQL:

cURL

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
Propriedade Valor
[PROJECT_ID] O ID do seu projeto no Google Cloud.
[JSON_PATH] O caminho para o arquivo JSON que contém os dados da solicitação para o servidor de banco de dados de origem.

Configurar uma réplica do Cloud SQL

A réplica do Cloud SQL acabará contendo os dados do servidor de banco de dados de origem. Nesta etapa, você criará os dados da solicitação e os usará em um comando cURL que cria a réplica do Cloud SQL no Cloud SQL.

Criar os dados da solicitação

Os dados da solicitação contêm informações básicas sobre o servidor de banco de dados de origem e a réplica do Cloud SQL no formato JSON. Os dados da solicitação podem ser configurados para uma réplica do Cloud SQL em uma rede pública ou privada e precisam conter estas informações:

replica.json

{
    "settings": {
        "tier": "[TIER]",
        "dataDiskSizeGb": "[DISK_SIZE]",
        "ipConfiguration": {
            "privateNetwork": "projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]"
         }
    },
    "masterInstanceName": "[SOURCE_NAME]",
    "region": "[SOURCE_REGION]",
    "databaseVersion": "[MYSQL_VERSION]",
    "name": "[REPLICA_NAME]"
}

exemplo

{
    "settings": {
        "tier": "db-custom-4-15360",
        "dataDiskSizeGb": "100"
    },
    "masterInstanceName": "source-instance",
    "region": "us-central1",
    "databaseVersion": "MYSQL_5_7",
    "name": "replica-instance"
}
Campos opcionais: Observações
ipConfiguration Só inclua isso se a réplica do Cloud SQL estiver em uma rede privada.
Propriedade Valor
[TIER] O tipo de máquina para hospedar a instância da réplica. Se você não souber qual tipo de máquina usar, comece com db-custom-2-7680. É possível alterar o tamanho e outros valores compatíveis posteriormente, se necessário.
[DISK_SIZE] O tamanho de armazenamento da réplica do Cloud SQL, em GB.
[SOURCE_NAME] O nome da instância de representação de origem.
[SOURCE_REGION] A região atribuída à instância de representação de origem.
[MYSQL_VERSION] A versão do MySQL a ser usada com a réplica do Cloud SQL. Suas opções são MYSQL_5_6, MYSQL_5_7 e MYSQL_8_0. Isso pode corresponder à versão do MySQL em execução no servidor de banco de dados de origem ou pode ter no máximo uma versão. Por exemplo, se estiver usando o MySQL 5.5 no servidor de banco de dados de origem, será possível utilizar o MySQL 5.6 com a réplica do Cloud SQL.
[REPLICA_NAME] O nome da réplica do Cloud SQL a ser criada.
[PROJECT_ID] O ID do seu projeto no Google Cloud.
[NETWORK_NAME] O nome da rede privada a ser usada com a réplica do Cloud SQL.

Crie a réplica do Cloud SQL

Antes de concluir esta etapa, crie um arquivo JSON que contenha os dados da sua solicitação de réplica. Em seguida, abra um terminal e use estes comandos para criar uma réplica do Cloud SQL no Cloud SQL:

cURL

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

exemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./replica.json \
     -X POST \
Propriedade Valor
[PROJECT_ID] O ID do seu projeto no Google Cloud.
[JSON_PATH] O caminho para o arquivo JSON que contém os dados da solicitação para a réplica do Cloud SQL.

O que você precisa ver quando tiver terminado

Para garantir que suas instâncias foram configuradas corretamente, acesse a página Instâncias do Cloud SQL. Você verá sua instância de representação de origem e a réplica do Cloud SQL. Elas serão semelhantes a esta:

ID da instância Tipo IP público
(-) source-representation-instance Principal externo do MySQL 10.68.48.3:3306
     replica-instance Réplica de leitura do MySQL 34.66.48.59

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

O usuário de replicação 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 ela seja usada somente com a réplica do Cloud SQL. Abra um terminal no servidor de banco de dados de origem e insira estes comandos:

MySQL

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

exemplo

UPDATE mysql.user
  SET Host='192.0.2.0' WHERE Host='%' AND User='replicationUser';
FLUSH PRIVILEGES;
Propriedade Valor
[USERNAME] A conta do usuário de replicação no servidor de banco de dados de origem.
[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.

Permitir conexões de entrada no servidor de banco de dados de origem

A réplica do Cloud SQL precisa se conectar ao servidor de banco de dados de origem para que a replicação seja bem-sucedida. Você precisa configurar o firewall de rede do servidor de banco de dados de origem para aceitar conexões provenientes do endereço IP de saída da réplica do Cloud SQL se todas as condições a seguir forem aplicáveis:

  • O servidor de banco de dados de origem está protegido por firewall ou alguma outra restrição de rede.
  • Sua réplica do Cloud SQL está usando um IP público.

Para instruções, consulte Como adicionar um endereço ou intervalo de endereços autorizado. Para se conectar à réplica do Cloud SQL, use o endereço IP principal da réplica. Esse endereço IP é exibido no Console do Cloud.

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 de banco de dados de origem.

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 de banco de dados de origem.
  • Privilégios de usuário de replicação.
  • Compatibilidade de versões.

Se você estiver executando uma sincronização on-line, os comandos abaixo também verificarão se:

  • A réplica do Cloud SQL ainda não está replicando.
  • Os registros binários estão ativados no servidor de banco de dados de origem.
  • GTID é ativado se você estiver tentando fazer uma sincronização externa de um servidor de banco de dados de origem no RDS e estiver usando um bucket do Google Cloud.

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",
         "skipVerification": false
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
Propriedade Valor
[SYNC_MODE] Os valores podem ser online ou offline. Se online for usado, verifyExternalSyncSettings verificará se é possível manter a réplica do Cloud SQL e o servidor de banco de dados de origem 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.

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 de banco de dados de origem, 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.

Replicar o servidor de banco de dados de origem

Depois de verificar se é possível replicar usando o servidor de banco de dados de origem, você estará pronto para executar a replicação. Esperamos que a réplica importe de 25 a 50 GB por hora.

Durante o processo de importação inicial, não execute nenhuma operação DDL no servidor de banco de dados de origem. 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 de banco de dados de origem para alcançar o estado atual desse servidor.

Se você não tiver permissão para acessar o bloqueio de leitura global no servidor de banco de dados de origem e o GTID estiver desativado, como pode ocorrer com o Amazon RDS, consulte Etapas com registros, consulte Etapas.

Etapas

Abra um terminal e digite os comandos abaixo para replicar usando o servidor de banco de dados de origem.

Etapas com registros

  1. Acesse o Visualizador de registros e selecione a réplica do Cloud SQL na lista de recursos. Você precisa ver uma lista dos registros mais recentes da sua réplica do Cloud SQL. Ignore-os por enquanto.
  2. Abra um terminal e digite os comandos abaixo destas etapas para replicar usando o servidor de banco de dados de origem.
  3. Retorne ao Visualizador de registros. Quando você vir o registro abaixo, pare de gravar no banco de dados no servidor de banco de dados de origem. Na maioria dos casos, isso é necessário apenas por alguns segundos.

    DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
    
  4. Quando o registro abaixo aparecer no Visualizador de registros, ative novamente a gravação no banco de dados no servidor de banco de dados de origem.

    DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
    

Aqui estão os comandos para replicar pelo servidor de banco de dados de origem:

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]/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 Valor
[SYNC_MODE] Os valores podem ser online ou offline. Se online, as alterações futuras no servidor de banco de dados de origem serão refletidas na réplica do Cloud SQL. Se offline, as alterações futuras não serão refletidas na réplica do Cloud SQL.
[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.

Confirmar o status de replicação

Quando a réplica do Cloud SQL termina a replicação, ela se conecta ao servidor de banco de dados de origem e aplica todas as atualizações feitas após a exportação. Siga estas etapas para confirmar seu status de replicação.

É importante verificar o status da replicação antes de promover a réplica para uma instância autônoma. Se o processo de replicação não estiver completo e bem-sucedido, uma réplica promovida não terá todas as alterações da sua instância de representação de origem.

Se o atraso da replicação não estiver em direção a 0, tome medidas para resolver o problema.

Se o GTID estiver desativado, a recuperação pontual (PITR) e os registros binários serão desativados na réplica promovida. Para ativar o GTID, ative o PITR. Isso requer a reinicialização da instância.

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.

Procedimentos complementares

Estes procedimentos podem ser úteis para configurar a replicação.

Configurar retenção de registros binários

Configure o servidor de banco de dados de origem para reter os registros binários por pelo menos 24 horas.

Comunidade do MySQL

Se o servidor de banco de dados de origem estiver usando o MySQL Community Edition, será possível usar esses comandos do MySQL para atualizar suas configurações de retenção de registros binários.

MySQL do Cloud

Se o servidor de banco de dados de origem estiver usando o MySQL do Cloud SQL, seus registros binários serão mantidos por sete dias. Não é possível alterar essa configuração.

Amazon RDS

Se o servidor de banco de dados de origem for uma instância do Amazon RDS, será possível usar este comando para atualizar as configurações de retenção de registros binários:

call mysql.rds_set_configuration('binlog retention hours', 24);

Adicionar usuários à réplica do Cloud SQL

As contas de usuário do MySQL não podem ser importadas do servidor de banco de dados de origem, mas é possível criá-las em uma réplica do Cloud SQL. Faça isso antes da replicação do servidor de banco de dados de origem.

Conseguir o endereço IP de saída da réplica do Cloud SQL

Use o endereço IP de saída da réplica do Cloud SQL para criar uma conexão segura entre o servidor de banco de dados de origem e a réplica do Cloud SQL. Há algumas maneiras de conseguir esse endereço IP de saída:

gcloud

gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"

Cloud SQL

  1. Abra a página de instâncias do Cloud SQL.
  2. Ao lado do endereço IP público da réplica do Cloud SQL, passe o cursor sobre a dica da ferramenta Mais informações e recupere o endereço IP de saída. O endereço IP de saída não é o endereço IP exibido na listagem principal da réplica no Console do Cloud.

Atualizar a representação de origem ou a réplica do Cloud SQL

Depois de configurar uma representação de origem ou uma réplica do Cloud SQL, é possível atualizá-la com estas configurações. Por exemplo, estes cenários exigem uma atualização nas configurações:

  • O host, a porta ou o IP do servidor de banco de dados de origem é alterado.
  • Se você quiser usar um usuário diferente de replicação do MySQL.
  • A senha do usuário de replicação do MySQL é alterada.
  • Os certificados SSL usados para se conectar com segurança às alterações do servidor de banco de dados de origem.

Solução de problemas

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
Specified key was too long; max key length is 767 bytes. A instância principal externa pode ter a variável innodb_large_prefix definida. Defina a sinalização innodb_large_prefix como ON ao criar a réplica ou atualize a réplica atual com a sinalização.
Table definition has changed. Houve alterações na linguagem de definição de dados (DDL, na sigla em inglês) durante o processo de despejo. Evite mudanças em DDL durante o processo de despejo.
Mensagem de erro: Access denied; you need (at least one of) the SUPER privilege(s) for this operation Pode haver uma visualização, uma função ou um procedimento no banco de dados de origem que referencie DEFINER de uma maneira que não é compatível com o Cloud SQL. Veja mais informações sobre o uso do DEFINER no Cloud SQL.
Mensagem de erro: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost Há um DEFINER no banco de dados de origem que não existe na réplica. Veja mais informações sobre o uso de DEFINER no Cloud SQL.
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 principal externa está disponível para conexão ou use mysqldump com a opção max_allowed_packet.
Got packet bigger than 'max_allowed_packet' bytes when dumping table O pacote era maior do que o permitido pelas configurações. Use mysqldump com a opção max_allowed_packet.
A migração inicial dos dados foi bem-sucedida, mas nenhum dado está sendo replicado. Pode haver sinalizações de replicação conflitantes. Verifique estas configurações de sinalização.
A migração inicial de dados foi bem-sucedida, mas a replicação de dados deixa de funcionar após um tempo. Há muitas causas possíveis. Tente estas sugestões:
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. Aumente o tamanho do disco manualmente ou ative o aumento automático de armazenamento.

A chave especificada era muito longa. O comprimento máximo da chave é 767 bytes

Você verá o erro Specified key was too long; max key length is 767 bytes.

Possível problema

A instância principal externa pode ter a variável innodb_large_prefix definida. Isso permite prefixos de chave de índice com mais de 767 bytes. O valor padrão é OFF para MySQL 5.6.

O que você deve tentar

Defina a sinalização innodb_large_prefix como ON ao criar a réplica ou atualize a réplica atual com a sinalização.


A definição da tabela foi alterada

Você verá o erro Table definition has changed.

Possível problema

Houve alterações de DDL durante o processo de despejo.

O que você deve tentar

Não modifique tabelas nem faça outras alterações de DDL durante o processo de despejo.


Acesso negado. Você precisa de (pelo menos um dos) privilégios de SUPER para esta operação

Você verá o erro Access denied; you need (at least one of) the SUPER privilege(s) for this operation.

Possível problema

A causa raiz pode ser o cliente VIEW/FUNCTION/PROCEDURE com DEFINER usando superusuario@localhost (como root@localhost). Isso não é compatível com o Cloud SQL.

O que você pode tentar

A solução é atualizar o definidor nos bancos de dados externos, por exemplo, de root@localhost para root@% ou não um superusuário. Consulte Controle de acesso ao objeto armazenado para mais informações.


ERRO 1045 (28000) na linha xxx: acesso negado para o usuário 'cloudsqlimport'@'localhost

Você verá o erro ERROR 1045 (28000) at line xxx: Access denied for user 'cloudsqlimport'@'localhost

Possível problema

Um usuário no banco de dados de origem com a cláusula DEFINER não existe no banco de dados de réplica, e ele é referenciado nas definições de objetos no banco de dados de origem.

O que você pode tentar

Os usuários não são migrados com os dados. Crie os usuários do banco de dados de origem no banco de dados de réplica antes de iniciar a replicação.


Perda de conexão com o servidor MySQL durante a consulta ao despejar tabela

Você verá o erro Lost connection to MySQL server during query when dumping table.

Possível problema

  • A origem pode ter ficado indisponível para se conectar pela réplica.

  • O banco de dados de origem pode ter tabelas com blobs grandes ou strings longas que exigem a configuração de max_allowed_packet como um número maior no banco de dados de origem.

O que você deve tentar

  • Reinicie e verifique se a instância principal externa está disponível para conexão.

  • Use mysqldump com a opção max_allowed_packet para despejar dados e migrar com o arquivo dump.


Pacote maior com bytes "max_allowed_packet" ao despejar tabela

Você verá o erro Got packet bigger than 'max_allowed_packet' bytes when dumping table.

Possível problema

O pacote era maior do que o permitido pelas configurações.

O que você deve tentar

Use mysqldump com a opção max_allowed_packet para despejar dados e migrar com o arquivo dump.


Nenhum dado está sendo replicado.

A migração inicial dos dados foi bem-sucedida, mas nenhum dado está sendo replicado.

Possível problema

Uma possível causa raiz pode ser a sinalização do seu banco de dados de origem, o que faz com que algumas ou todas as alterações do banco de dados não sejam replicadas.

O que você deve tentar

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 concluída, mas a replicação de dados deixará de funcionar após um tempo

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

Possível problema

Pode haver muitas causas raiz para esse problema.

O que você pode tentar

  • Verifique as métricas de replicação para sua instância de réplica na IU do Cloud Monitoring.

  • Os erros da linha de execução de E/S do MySQL ou do SQL podem ser encontrados no Cloud Logging nos arquivos de registros mysql.err.

  • O erro também pode ser encontrado ao se conectar à instância da réplica. Execute o comando SHOW SLAVE STATUS e verifique estes campos na saída:

    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error

Falha na verificação do mysqld: o disco de dados está cheio

Você verá o erro mysqld check failed: data disk is full.

Possível problema

Se você vir esse erro durante uma operação DRAIN, o disco de dados da instância da réplica estará cheio.

O que você deve tentar

Aumente o tamanho do disco da instância da réplica.

A seguir