Recuperação pontual

Nesta página, descrevemos como usar a recuperação pontual para restaurar a instância do Cloud SQL.

Para saber mais sobre a recuperação pontual, veja Recuperação pontual.

Ativar recuperação pontual

Quando você cria uma instância no Console do Google Cloud, as opções Backups automatizados e Ativar a recuperação pontual são ativadas automaticamente. Esse procedimento permite a recuperação pontual em uma instância atual.

Console

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

    Acesse "Instâncias do Cloud SQL"

  2. Abra o menu "Mais ações" Ícone mais ações. para a instância em que você quer ativar a recuperação pontual e clique em Editar.
  3. Em Personalizar a instância, expanda a seção Backups.
  4. Marque a caixa de seleção Ativar recuperação pontual.
  5. Expanda Opções avançadas.
  6. Adicione o número de dias de retenção de registros, de um a sete.
  7. Clique em Save.

gcloud

  1. Exiba a visão geral da instância:
      gcloud sql instances describe INSTANCE_NAME
    
  2. Se você vir enabled: false na seção backupConfiguration, ative os backups programados:
      gcloud sql instances patch INSTANCE_NAME \
                                 --backup-start-time=HH:MM
    

    Especifique o parâmetro backup-start-time usando o horário de 24 horas no fuso horário UTC±00.

  3. Ative a recuperação pontual:
    gcloud sql instances patch INSTANCE_NAME \
                               --enable-bin-log \
                               --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. Confirme a alteração.
    gcloud sql instances describe INSTANCE_NAME

    Quando a operação é realizada, é exibido binaryLogEnabled: true na seção backupConfiguration.

REST v1

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

  • project-id: o ID do projeto
  • instance-id: o ID da instância (primária ou réplica);
  • start-time: o horário no formato "HH:MM"

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Corpo JSON da solicitação:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "start-time",
      "enabled": true,
      "binaryLogEnabled": true
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

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

  • project-id: o ID do projeto
  • instance-id: o ID da instância (primária ou réplica);
  • start-time: o horário no formato "HH:MM"

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances/instance-id

Corpo JSON da solicitação:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "start-time",
      "enabled": true,
      "binaryLogEnabled": true
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Realizar a recuperação pontual

Console

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

    Acesse "Instâncias do Cloud SQL"

  2. Abra o menu "Mais ações" Ícone mais ações. para a instância a ser recuperada e clique em Clonar.
  3. Opcional. Na página Criar um clone, atualize o nome da nova instância.
  4. Selecione Clone de um momento anterior
  5. Insira um horário de recuperação pontual.
  6. Clique em Criar clone.

gcloud

Crie um clone usando a recuperação pontual.

Substitua:

  • SOURCE_INSTANCE_NAME: nome da instância de que você está restaurando;
  • NEW_INSTANCE_NAME: nome do clone;
  • TIMESTAMP: fuso horário UTC para a instância de origem no formato RFC 3339. Por exemplo, 2012-11-15T16:19:00.094Z.

gcloud sql instances clone SOURCE_INSTANCE_NAME \
                           NEW_INSTANCE_NAME \
                           --point-in-time 'TIMESTAMP'

REST v1

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

  • project-id: o ID do projeto
  • target-instance-id: o ID da instância de destino
  • source-instance-id: o ID da instância de origem
  • restore-timestamp: o momento em que a restauração será interrompida.

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":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

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

  • project-id: o ID do projeto
  • target-instance-id: o ID da instância de destino
  • source-instance-id: o ID da instância de origem
  • restore-timestamp: o momento em que a restauração será interrompida.

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":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Desativar a recuperação pontual

Console

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

    Acesse "Instâncias do Cloud SQL"

  2. Abra o menu "Mais ações" Ícone mais ações. para a instância a ser desativada e selecione Editar.
  3. Em Personalizar a instância, expanda a seção Backups.
  4. Desmarque a opção Ativar recuperação pontual.
  5. Clique em Save.
  6. Na página Visão geral da instância, binaryLogEnabled é exibido como false.

gcloud

  1. Desative a recuperação pontual:
    gcloud sql instances patch INSTANCE_NAME \
                               --no-enable-bin-log
  2. Confirme a alteração:
    gcloud sql instances describe INSTANCE_NAME
    

    Quando a operação é realizada, é exibido binaryLogEnabled: false na seção backupConfiguration.

REST v1

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

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Corpo JSON da solicitação:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "binaryLogEnabled": false
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

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

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Corpo JSON da solicitação:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "binaryLogEnabled": false
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Uso de disco e recuperação pontual

A recuperação pontual usa registros binários. Eles são atualizados regularmente e usam espaço de armazenamento. Os registros binários são excluídos automaticamente com o backup automático associado, o que geralmente acontece após cerca de sete dias.

Se o tamanho dos registros binários estiver causando um problema para a instância:

  • É possível aumentar o tamanho do armazenamento da instância, mas o aumento do tamanho do registro binário no uso do disco pode ser temporário.

  • Recomendamos que você ative o aumento automático de armazenamento para evitar problemas de armazenamento inesperados.

  • É possível desativar a recuperação pontual se você quiser excluir registros e recuperar espaço de armazenamento. A redução do armazenamento usado não diminui o tamanho do armazenamento provisionado para a instância.

  • Os registros são limpados uma vez por dia, e não continuamente. Configurar a retenção de registros para dois dias significa que no mínimo dois dias de registros, e no máximo três, serão mantidos. Recomendamos que você defina o número de backups como sendo maior do que o número de dias de retenção de registros. Dessa forma, é possível garantir um mínimo de dias especificados para a retenção.

Definir a retenção do registro de transações

Para definir o número de dias de retenção de registros binários (de 1 a 7):

Console

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

    Acesse "Instâncias do Cloud SQL"

  2. Abra o menu "Mais ações" Ícone mais ações. para a instância em que você quer definir o registro das transações e selecione Editar.
  3. Em Personalizar a instância, expanda a seção Backups.
  4. Na seção Ativar recuperação pontual, expanda Opções avançadas.
  5. Adicione o número de dias de retenção de registros, de um a sete.
  6. Clique em Save.

gcloud

Edite a instância para definir o número de dias de retenção dos registros binários.

Substitua:

  • INSTANCE-NAME: o nome da instância em que você quer definir o registro de transações;
  • DAYS-TO-RETAIN: o número de dias de registros de transação a serem mantidos. O intervalo válido é entre um e sete. Se não for especificado um valor, será usado o padrão que é de sete dias. Válido apenas quando a recuperação pontual estiver ativada. A especificação de mais dias de registros de transações requer um tamanho de armazenamento maior.

gcloud sql instances patch INSTANCE-NAME 
--retained-transaction-log-days=DAYS-TO-RETAIN

REST v1beta4

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

  • days-to-retain: o número de dias para armazenar registros de transação, de 1 a 7
  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Corpo JSON da solicitação:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Realizar a recuperação pontual usando posições de registro binário

Recomendamos realizar a recuperação pontual usando carimbos de data/hora, conforme descrito no procedimento anterior. A recuperação pontual também pode ser feita com o fornecimento de uma posição de registro binário específica em um arquivo de registro binário.

Para mais informações sobre a recuperação pontual usando posições de registro binário, veja a "Referência do MySQL", Recuperação pontual usando o registro binário (em inglês).

Antes de começar

Antes de concluir esta tarefa, você precisa ter:

Identificar a posição de recuperação

  1. Use o cliente MySQL para se conectar à instância para que você quer restaurar.

    Para fazer isso, use o Cloud Shell ou a máquina cliente local. Para mais informações, consulte Opções de conexão para aplicativos externos.

  2. Mostre os arquivos de registros binários para a instância:

    SHOW BINARY LOGS;
    
  3. Exibir os 100 primeiros eventos no arquivo de registros binários mais recente:

    SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' LIMIT 100;
    

    É possível ajustar o número de linhas a serem exibidas, mas não mostrar todos os eventos no arquivo até saber o tamanho dele. A exibição de um grande número de eventos pode afetar o desempenho do sistema.

  4. Se o evento que você está procurando não for exibido, use a última posição exibida como ponto de partida para pesquisar o próximo conjunto de eventos:

    SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' FROM <POSITION> LIMIT 100;
    
  5. Ao encontrar o evento que marca o momento em que a restauração será interrompida, registre a posição (mostrada como Pos) e o nome do arquivo de registro binário.

    O nome de arquivo e a posição do registro binário são os valores usados para a recuperação pontual.

Veja abaixo um exemplo de saída do comando SHOW BINLOG EVENTS:

+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                                |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
| mysql-bin.000011 |   4 | Format_desc |  88955285 |         120 | Server ver: 5.6.30-log, Binlog ver: 4               |
| mysql-bin.000011 | 120 | Query       |  88955285 |         211 | create database db1                                 |
| mysql-bin.000011 | 211 | Query       |  88955285 |         310 | use `db1`; CREATE TABLE t (c CHAR(20))              |
| mysql-bin.000011 | 310 | Query       |  88955285 |         381 | BEGIN                                               |
| mysql-bin.000011 | 381 | Table_map   |  88955285 |         426 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 310 | Query       |  88955285 |         381 | BEGIN                                               |

| mysql-bin.000011 | 426 | Write_rows  |  88955285 |         464 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 464 | Xid         |  88955285 |         495 | COMMIT /* xid=56 */                                 |
| mysql-bin.000011 | 495 | Query       |  88955285 |         566 | BEGIN                                               |
| mysql-bin.000011 | 566 | Table_map   |  88955285 |         611 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 611 | Write_rows  |  88955285 |         649 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 649 | Xid         |  88955285 |         680 | COMMIT /* xid=57 */                                 |
| mysql-bin.000011 | 680 | Query       |  88955285 |         751 | BEGIN                                               |
| mysql-bin.000011 | 751 | Table_map   |  88955285 |         796 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 796 | Write_rows  |  88955285 |         834 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 834 | Xid         |  88955285 |         865 | COMMIT /* xid=58 */                                 |
| mysql-bin.000011 | 865 | Query       |  88955285 |         977 | use `db1`; DROP TABLE `t` /* generated by server */ |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
16 rows in set (0.04 sec)

Para restaurar até a instrução DROP TABLE, em negrito acima, seria preciso usar "865" em "mysql-bin.000011" como a posição de recuperação. A instrução DROP TABLE e todas as operações depois dela não são refletidas na nova instância.

Realizar a recuperação pontual usando posições de evento de registro binário

gcloud

Use o comando gcloud sql instances clone com as sinalizações --bin-log-file-name e --bin-log-position.

  1. Crie a instância usando o nome de arquivo do registro binário e a posição de recuperação.

    Substitua:

    • SOURCE_INSTANCE_NAME: nome da instância da qual você está restaurando;
    • NEW_INSTANCE_NAME: nome do clone;
    • BINLOG_FILE_NAME: nome do registro binário, como mysql-bin.187288;
    • POSITION: a posição no registro binário em que a restauração será interrompida, como 50001356.
    gcloud sql instances clone SOURCE_INSTANCE_NAME \
                               NEW_INSTANCE_NAME \
                               --bin-log-file-name="BINLOG_FILE_NAME" \
                               --bin-log-position=POSITION

    Por exemplo, é possível que um comando gcloud sql instances clone seja parecido com isto:

    gcloud sql instances clone instance1 \
                               instance1-clone \
                               --bin-log-file-name=mysql-bin.0000031 \
                               --bin-log-position=107 \
  2. Use o ID de operação retornado pelo comando clone para verificar o status da operação de restauração.
    gcloud sql operations describe OPERATION_ID

    Quando a operação está em andamento, um estado RUNNING é retornado. Quando a operação é concluída, um estado DONE é retornado.

REST v1

Crie a instância usando o nome do arquivo de registros binários e a posição de recuperação que você identificou:

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

  • project-id: o ID do projeto
  • target-instance-id: o ID da instância de destino
  • source-instance-id: o ID da instância de origem
  • binary-log-file-name: o nome do arquivo de registro binário
  • binary-log-position: a posição no arquivo de registros binários

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":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "binLogCoordinates":
    {
      "kind": "sql#binLogCoordinates",
      "binLogFileName": "binary-log-file-name",
      "binLogPosition": "binary-log-position"
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

Crie a nova instância usando o nome do arquivo de registros binários e a posição da recuperação identificada:

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

  • project-id: o ID do projeto
  • target-instance-id: o ID da instância de destino
  • source-instance-id: o ID da instância de origem
  • binary-log-file-name: o nome do arquivo de registro binário
  • binary-log-position: a posição no arquivo de registros binários

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":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "binLogCoordinates":
    {
      "kind": "sql#binLogCoordinates",
      "binLogFileName": "binary-log-file-name",
      "binLogPosition": "binary-log-position"
    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Resolver problemas

Problema Solução de problemas

argument --point-in-time: Failed to parse date/time:
Unknown string format: 2021-0928T30:54:03.094;
received: 2021-0928T30:54:03.094Z

OU

Invalid value at 'body.clone_context.point_in_time'
(type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime',
Invalid time format: Failed to parse input,

O carimbo de data/hora fornecido é inválido.

HTTP Error 400: Successful backup required for carrying out the operation was not found.

OU

Successful backup required for carrying out the operation was not found. or Time where no backups can be found.

O carimbo de data/hora que você forneceu refere-se a um momento em que não foram encontrados backups ou coordenadas binlog.

A seguir