Clonar instâncias

Nesta página, explicamos a clonagem e descrevemos como clonar uma instância.

Informações gerais

A clonagem de uma instância do Cloud SQL cria uma nova instância, que é uma cópia da instância de origem. Essa nova instância é completamente independente da instância de origem.

Perguntas frequentes

Pergunta Resposta
A clonagem afeta o desempenho? Não. A clonagem não afeta o desempenho da instância de origem.
Os backups são copiados para a nova instância? Não. A nova instância cria novos backups automatizados. Os backups manuais não são copiados da instância de origem.
A nova instância tem o mesmo endereço ou os mesmos endereços IP? Não. A nova instância tem um novo endereço ou novos endereços IP.
A nova instância tem as mesmas definições de configuração? Sim. A nova instância tem as mesmas configurações, como flags de banco de dados, opções de conectividade, tipo de máquina e configurações de armazenamento e memória.
As réplicas são copiadas para a nova instância? Não. Você precisa criar novas réplicas para a nova instância.
É possível clonar uma réplica? Não é possível clonar uma réplica.
É possível fazer uma clonagem de um momento anterior? Sim. A recuperação pontual usa clonagem para restaurar uma instância de um momento anterior. Isso ajuda você a recuperar seu banco de dados de um evento destrutivo.
As configurações de manutenção da instância de origem são copiadas de maneira automática para a instância clone? Não. É necessário definir as configurações de manutenção para a instância clone.
É possível clonar uma instância que já foi um clone? Sim. É permitido clonar uma instância que foi clonada de outra instância.
Os usuários do banco de dados são copiados para a nova instância? Sim, mas as senhas do usuário do banco de dados não são copiadas e precisam ser redefinidas.

Clonar uma instância

Você pode clonar uma instânica do Cloud SQL usando o console do Google Cloud, gcloud CLI, Terraform ou a API.

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Encontre a linha da instância a ser clonada.
  3. Na coluna Ações, clique no menu Mais ações .
  4. Clique em Criar clone.
  5. Na página Criar um clone, atualize o ID da instância, se necessário, e clique em Criar clone, saindo de Clonar o estado atual da instância selecionado.

    Você retorna à página de listagem de instâncias e o clone é inicializado.

gcloud

Para clonar uma instância, use o comando gcloud sql instances clone:

gcloud sql instances clone SOURCE_INSTANCE_NAME DESTINATION_INSTANCE_NAME \
--project PROJECT_ID \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

Faça as seguintes substituições:

  • SOURCE_INSTANCE_NAME: o nome da instância do Cloud SQL a ser clonada
  • DESTINATION_INSTANCE_NAME: o nome da instância clonada
  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém as instâncias de origem e destino.
  • ZONE_NAME: opcional. O nome da zona primária da instância de destino. Use essa opção se quiser que a instância de destino esteja em uma zona primária diferente da instância do Cloud SQL que você está clonando. Para uma instância regional, esta zona substitui a zona principal, mas a zona secundária permanece igual à instância.
  • SECONDARY_ZONE_NAME: opcional. O nome da zona secundária da instância de destino. Use-o para especificar uma zona secundária diferente para a instância regional do Cloud SQL que você quer clonar.

Se você estiver usando os parâmetros --preferred-zone e --preferred-secondary-zone, as seguintes condições serão aplicadas:

  • As zonas principal e secundária precisam ser válidas.
  • As duas zonas precisam pertencer à mesma região da instância de origem.
  • As zonas principal e secundária precisam ser diferentes.
  • Para instâncias zonais, não é possível usar o parâmetro --preferred-secondary-zone. Se você fizer isso, o processo de clonagem da instância vai falhar.
  • Se você não especificar valores para os parâmetros --preferred-zone ou --preferred-secondary-zone, a instância clonada terá as mesmas zonas principal e secundária da instância de origem.

Para executar o comando gcloud sql instances clone, você precisa ter a permissão cloudsql.instances.clone. Para mais informações sobre as permissões necessárias para executar os comandos da CLI gcloud, consulte Permissões do Cloud SQL.

Terraform

Para clonar a instância, use um recurso do Terraform

resource "google_sql_database_instance" "clone" {
  name             = "sqlserver-instance-clone-name"
  region           = "us-central1"
  database_version = "SQLSERVER_2017_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  clone {
    source_instance_name = google_sql_database_instance.source.id
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Aplique as alterações

Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

Excluir as alterações

Para excluir as mudanças, faça o seguinte:

  1. Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento deletion_protection como false.
    deletion_protection =  "false"
  2. Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply
  1. Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:

    terraform destroy

REST v1

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém as instâncias de origem e destino.
  • SOURCE_INSTANCE_NAME: o nome da instância do Cloud SQL a ser clonada
  • DESTINATION_INSTANCE_NAME: o nome da instância clonada
  • ZONE_NAME: opcional. O nome da zona primária da instância de destino. Use essa opção se quiser que a instância de destino esteja em uma zona primária diferente da instância do Cloud SQL que você está clonando. Para uma instância regional, esta zona substitui a zona principal, mas a zona secundária permanece igual à instância.
  • SECONDARY_ZONE_NAME: opcional. O nome da zona secundária da instância de destino. Use-o para especificar uma zona secundária diferente para a instância regional do Cloud SQL que você quer clonar.

Método HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

Corpo JSON da solicitação:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Se você estiver usando os parâmetros preferredZone e preferredSecondaryZone, as seguintes condições serão aplicadas:

  • As zonas principal e secundária precisam ser válidas.
  • As duas zonas precisam pertencer à mesma região da instância de origem.
  • As zonas principal e secundária precisam ser diferentes.
  • Para instâncias zonais, não é possível usar o parâmetro preferredSecondaryZone. Se você fizer isso, o processo de clonagem da instância vai falhar.
  • Se você não especificar valores para os parâmetros preferredZone ou preferredSecondaryZone, a instância clonada terá as mesmas zonas principais e secundárias que a instância de origem.

Para usar o método da API instances.clone, você precisa ter a permissão cloudsql.instances.clone. Para mais informações sobre as permissões necessárias para usar os métodos da API, consulte Permissões do Cloud SQL.

REST v1beta4

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém as instâncias de origem e destino.
  • SOURCE_INSTANCE_NAME: o nome da instância do Cloud SQL a ser clonada
  • DESTINATION_INSTANCE_NAME: o nome da instância clonada
  • ZONE_NAME: opcional. O nome da zona primária da instância de destino. Use essa opção se quiser que a instância de destino esteja em uma zona primária diferente da instância do Cloud SQL que você está clonando. Para uma instância regional, esta zona substitui a zona principal, mas a zona secundária permanece igual à instância.
  • SECONDARY_ZONE_NAME: opcional. O nome da zona secundária da instância de destino. Use-o para especificar uma zona secundária diferente para a instância regional do Cloud SQL que você quer clonar.

Método HTTP e URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

Corpo JSON da solicitação:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Se você estiver usando os parâmetros preferredZone e preferredSecondaryZone, as seguintes condições serão aplicadas:

  • As zonas principal e secundária precisam ser válidas.
  • As duas zonas precisam pertencer à mesma região da instância de origem.
  • As zonas principal e secundária precisam ser diferentes.
  • Para instâncias zonais, não é possível usar o parâmetro preferredSecondaryZone. Se você fizer isso, o processo de clonagem da instância vai falhar.
  • Se você não especificar valores para os parâmetros preferredZone ou preferredSecondaryZone, a instância clonada terá as mesmas zonas principais e secundárias que a instância de origem.

Para usar o método da API instances.clone, você precisa ter a permissão cloudsql.instances.clone. Para mais informações sobre as permissões necessárias para usar os métodos da API, consulte Permissões do Cloud SQL.

Clonar uma instância que usa um endereço IP interno

Se a instância do Cloud SQL usar um endereço IP interno, será possível especificar um intervalo de IP alocado para o novo endereço IP do clone. Por exemplo, google-managed-services-default.

gcloud

Clone a instância especificando opcionalmente o intervalo de IP alocado que você quer usar:

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--allocated-ip-range-name ALLOCATED_IP_RANGE_NAME

A conta de serviço ou o usuário que está executando o comando gcloud sql instances clone precisa ter a permissão cloudsql.instances.clone. Para mais informações sobre as permissões necessárias para executar os comandos da CLI gcloud, consulte Permissões do Cloud SQL.

REST v1

Clone a instância especificando opcionalmente o intervalo de IP alocado que você quer usar:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto;
  • source-instance-id: o ID da instância de origem
  • target-instance-id: o ID da instância de destino
  • allocated-ip-range-name: o nome de um intervalo de IP alocado

Método HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone

Corpo JSON da solicitação:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

O usuário ou a conta de serviço que está usando o método instances.clone da API precisa ter a permissão cloudsql.instances.clone. Para mais informações sobre as permissões necessárias para usar os métodos da API, consulte Permissões do Cloud SQL.

REST v1beta4

Clone a instância especificando opcionalmente o intervalo de IP alocado que você quer usar:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto;
  • source-instance-id: o ID da instância de origem
  • target-instance-id: o ID da instância de destino
  • allocated-ip-range-name: o nome de um intervalo de IP alocado

Método HTTP e URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone

Corpo JSON da solicitação:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

O usuário ou a conta de serviço que está usando o método instances.clone da API precisa ter a permissão cloudsql.instances.clone. Para mais informações sobre as permissões necessárias para usar os métodos da API, consulte Permissões do Cloud SQL.

Se você não especificar um intervalo de IP alocado, este comportamento será aplicado:

  • Se a instância de origem foi criada com um intervalo específico, a instância clonada será criada no mesmo intervalo.
  • Se a instância de origem não foi criada com um intervalo específico, a instância clonada será criada em um intervalo aleatório.

Resolver problemas

Problema Solução de problemas
Ocorreu uma falha na clonagem com um erro constraints/sql.restrictAuthorizedNetworks. A operação de clonagem é bloqueada pela configuração Authorized Networks. Authorized Networks são configurados para endereços IP públicos na seção "Conectividade" do console do Google Cloud, e a clonagem não é permitida devido a considerações de segurança.

Remova todas as entradas Authorized Networks da instância do Cloud SQL, se possível. Caso contrário, crie uma réplica sem nenhuma entrada Authorized Networks.

Mensagem de erro: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

Você está tentando usar o console do Google Cloud para clonar uma instância com um endereço IP particular, mas não especificou o intervalo de IP alocado que pretende usar e a instância de origem não foi criada com o intervalo especificado. Como resultado, a instância clonada é criada em um intervalo aleatório.

Use gcloud para clonar a instância e fornecer um valor para o parâmetro
--allocated-ip-range-name. Para mais informações, consulte Como clonar uma instância com um IP particular.