Clone instâncias

Esta página explica a clonagem e descreve como clonar uma instância.

Vista geral

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

Perguntas frequentes

Pergunta Responder
A clonagem afeta o desempenho? Não. A clonagem não tem impacto no desempenho da instância de origem.
As cópias de segurança são copiadas para a nova instância? Não. A nova instância cria novas cópias de segurança automáticas. As cópias de segurança manuais não são copiadas da instância de origem.
A nova instância tem o mesmo endereço ou endereços IP? Não. A nova instância tem um ou mais novos endereços IP.
A nova instância tem as mesmas definições de configuração? Sim. A nova instância tem as mesmas definições, como as sinalizações da base de dados, as opções de conetividade, o tipo de máquina e as definições de armazenamento e memória.
As réplicas são copiadas para a nova instância? Não. Tem de criar novas réplicas para a nova instância.
Podes clonar uma réplica? Não. Não pode clonar uma réplica.
Pode criar um clone a partir de um ponto anterior no tempo? Sim. A recuperação pontual usa a clonagem para restaurar uma instância a partir de um ponto anterior no tempo. Isto ajuda a recuperar a base de dados de um evento destrutivo.
As definições de manutenção da instância de origem são copiadas automaticamente para a instância clonada? Não. Tem de configurar as definições de manutenção para a instância clonada.
É possível clonar uma instância quando a zona da instância não está disponível? Sim. Se clonar uma instância zonal, pode especificar uma zona principal diferente para a instância. Se clonar uma instância de alta disponibilidade (regional), pode especificar zonas primárias e secundárias diferentes para a instância.
Posso clonar uma base de dados para outro projeto? Não. Não pode clonar uma base de dados para outro projeto.
Pode clonar uma instância que já foi um clone? Sim. Pode clonar uma instância que foi clonada a partir de outra instância.
Os utilizadores da base de dados são copiados para a nova instância? Sim, os utilizadores da base de dados são copiados para a nova instância. As palavras-passe destes utilizadores também são copiadas para que não tenham de ser recriadas.

Clone uma instância

Pode clonar uma instância do Cloud SQL através da Google Cloud consola, da CLI gcloud, do Terraform ou da API.

Consola

  1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Encontre a linha da instância a clonar.
  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, deixando a opção Clonar o estado atual da instância selecionada.

    É apresentada novamente a página de listagem de instâncias enquanto 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 clonar.
  • DESTINATION_INSTANCE_NAME: o nome da instância clonada.
  • PROJECT_ID: o ID ou o número do projeto do projeto Google Cloud que contém as instâncias de origem e destino.
  • ZONE_NAME: opcional. O nome da zona principal da instância de destino. Use esta opção se quiser que a instância de destino esteja numa zona principal diferente da instância do Cloud SQL que está a clonar. Para uma instância regional, esta zona substitui a zona principal, mas a zona secundária permanece igual à instância de origem.
  • SECONDARY_ZONE_NAME: opcional. O nome da zona secundária para a instância de destino. Use esta opção para especificar uma zona secundária diferente para a instância regional do Cloud SQL que quer clonar.

Se estiver a usar os parâmetros --preferred-zone e --preferred-secondary-zone, aplicam-se as seguintes condições:

  • As zonas principal e secundária têm de ser zonas válidas.
  • Ambas as zonas têm de pertencer à mesma região que a instância de origem.
  • As zonas primária e secundária têm de ser diferentes.
  • Para instâncias zonais, não pode usar o parâmetro --preferred-secondary-zone. Se o fizer, o processo de clonagem da instância falha.
  • Se não especificar valores para os parâmetros --preferred-zone ou --preferred-secondary-zone, a instância clonada tem as mesmas zonas principal e secundária que a instância de origem.

Para executar o comando gcloud sql instances clone, tem de ter a autorização cloudsql.instances.clone. Para mais informações sobre as autorizações necessárias para executar comandos da CLI gcloud, consulte o artigo Autorizações do Cloud SQL.

Terraform

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

resource "google_sql_database_instance" "clone" {
  name             = "postgres-instance-clone-name"
  region           = "us-central1"
  database_version = "POSTGRES_12"
  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 num Google Cloud projeto, conclua os passos nas secções seguintes.

Prepare o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.

    Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.

Prepare o diretório

Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).

  1. No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o ficheiro é denominado main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.

    Copie o exemplo de código para o ficheiro main.tf criado recentemente.

    Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.

  3. Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
  4. Guarde as alterações.
  5. Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
    terraform init

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

    terraform init -upgrade

Aplique as alterações

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

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

  2. Aplique a configuração do Terraform executando o seguinte comando e introduzindo yes no comando:
    terraform apply

    Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).

  3. Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.

Eliminar as alterações

Para eliminar as alterações, faça o seguinte:

  1. Para desativar a proteção contra eliminação, no ficheiro de configuração do Terraform, defina o argumento deletion_protection como false.
    deletion_protection =  "false"
  2. Aplique a configuração do Terraform atualizada executando o seguinte comando e introduzindo yes no comando:
    terraform apply
  1. Remova os recursos aplicados anteriormente com a sua configuração do Terraform executando o seguinte comando e introduzindo yes no comando:

    terraform destroy

REST v1

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Se estiver a usar os parâmetros preferredZone e preferredSecondaryZone, aplicam-se as seguintes condições:

  • As zonas principal e secundária têm de ser zonas válidas.
  • Ambas as zonas têm de pertencer à mesma região que a instância de origem.
  • As zonas primária e secundária têm de ser diferentes.
  • Para instâncias zonais, não pode usar o parâmetro preferredSecondaryZone. Se o fizer, o processo de clonagem da instância falha.
  • Se não especificar valores para os parâmetros preferredZone ou preferredSecondaryZone, a instância clonada tem as mesmas zonas principal e secundária que a instância de origem.

Para usar o método da API instances.clone, tem de ter a autorização cloudsql.instances.clone. Para mais informações sobre as autorizações necessárias para usar métodos da API, consulte o artigo Autorizações do Cloud SQL.

REST v1beta4

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Se estiver a usar os parâmetros preferredZone e preferredSecondaryZone, aplicam-se as seguintes condições:

  • As zonas principal e secundária têm de ser zonas válidas.
  • Ambas as zonas têm de pertencer à mesma região que a instância de origem.
  • As zonas primária e secundária têm de ser diferentes.
  • Para instâncias zonais, não pode usar o parâmetro preferredSecondaryZone. Se o fizer, o processo de clonagem da instância falha.
  • Se não especificar valores para os parâmetros preferredZone ou preferredSecondaryZone, a instância clonada tem as mesmas zonas principal e secundária que a instância de origem.

Para usar o método da API instances.clone, tem de ter a autorização cloudsql.instances.clone. Para mais informações sobre as autorizações necessárias para usar métodos da API, consulte o artigo Autorizações do Cloud SQL.

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

Se a sua instância do Cloud SQL usar um endereço IP interno, pode especificar opcionalmente um intervalo de IPs alocado para o novo endereço IP do clone. Por exemplo, google-managed-services-default.

gcloud

Clone a instância e, opcionalmente, especifique o intervalo de IPs atribuído que quer usar:

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

O utilizador ou a conta de serviço que está a executar o comando gcloud sql instances clone tem de ter a autorização cloudsql.instances.clone. Para mais informações sobre as autorizações necessárias para executar comandos da CLI gcloud, consulte o artigo Autorizações do Cloud SQL.

REST v1

Clone a instância e, opcionalmente, especifique o intervalo de IPs atribuído que quer usar:

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

O utilizador ou a conta de serviço que está a usar o método da API instances.clone tem de ter a autorização cloudsql.instances.clone. Para mais informações sobre as autorizações necessárias para usar métodos da API, consulte o artigo Autorizações do Cloud SQL.

REST v1beta4

Clone a instância e, opcionalmente, especifique o intervalo de IPs atribuído que quer usar:

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

O utilizador ou a conta de serviço que está a usar o método da API instances.clone tem de ter a autorização cloudsql.instances.clone. Para mais informações sobre as autorizações necessárias para usar métodos da API, consulte o artigo Autorizações do Cloud SQL.

Se não especificar um intervalo de IPs atribuído, é aplicado o seguinte comportamento:

  • Se a instância de origem tiver sido criada com um intervalo especificado, a instância clonada é criada no mesmo intervalo.
  • Se a instância de origem não tiver sido criada com um intervalo especificado, a instância clonada é criada num intervalo aleatório.

Resolver problemas

Problema Resolução de problemas
A clonagem falha com o erro constraints/sql.restrictAuthorizedNetworks. A operação de clonagem está bloqueada pela configuração Authorized Networks. Authorized Networks estão configurados para endereços IP públicos na secção Conetividade da consola, e a clonagem não é permitida devido a considerações de segurança. Google Cloud

Remova todas as entradas de Authorized Networks da instância do Cloud SQL, se possível. Caso contrário, crie uma réplica sem entradas 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].

Está a tentar usar a Google Cloud consola para clonar uma instância com um endereço IP privado, mas não especificou o intervalo de IP alocado que quer usar, e a instância de origem não foi criada com o intervalo especificado. Como resultado, a instância clonada é criada num 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 o artigo Clonar uma instância com um IP privado.