Práticas recomendadas para importar e exportar dados

Esta página fornece práticas recomendadas para importar e exportar dados com o Cloud SQL. Para ver instruções passo a passo para importar dados para o Cloud SQL, consulte o artigo Importar dados.

Para exportar dados do Cloud SQL para utilização numa instância do MySQL que gere, consulte Exportar e importar com ficheiros de despejo SQL ou Exportar e importar com ficheiros CSV.

Práticas recomendadas para importação e exportação

Seguem-se as práticas recomendadas a considerar quando importa e exporta dados:

Use o mesmo modo SQL para importação e exportação

A definição do modo SQL afeta a forma como o Cloud SQL interpreta as consultas SQL. Por exemplo, se exportar de uma base de dados sem o SQL rigoroso ativado e, em seguida, tentar importar para o Cloud SQL (que ativa o SQL rigoroso por predefinição), a importação pode falhar. A prática recomendada é usar o mesmo modo SQL na importação que usou para a exportação.

Reveja o modo SQL nas bases de dados de origem e de destino para verificar a compatibilidade. Preste especial atenção às flags que ativam o modo SQL rigoroso. Se o SQL rigoroso NÃO estiver definido na sua base de dados, é provável que queira removê-lo no Cloud SQL. Se remover o SQL rigoroso, tem de definir outra flag.

Para verificar se a sua instância do Cloud SQL tem o modo pretendido definido, execute SELECT @@GLOBAL.sql_mode;.

Não use contentores do Cloud Storage Requester Pays

Não pode usar um contentor do Cloud Storage com a opção O requerente paga ativada para importações e exportações do Cloud SQL.

Minimize o impacto no desempenho das exportações

Para uma exportação padrão do Cloud SQL, a exportação é executada enquanto a base de dados está online. Quando os dados exportados são mais pequenos, é provável que o impacto seja mínimo. No entanto, quando existem bases de dados grandes ou objetos grandes, como BLOBs na base de dados, existe a possibilidade de a exportação degradar o desempenho da base de dados. Isto pode afetar o tempo necessário para executar consultas e operações na base de dados. Depois de iniciar uma exportação, não é possível pará-la se a base de dados começar a responder lentamente.

Para evitar respostas lentas durante uma exportação, pode:

  1. Fazer a exportação a partir de uma réplica de leitura. Esta pode ser uma boa opção se fizer exportações com frequência (diariamente ou mais vezes), mas a quantidade de dados exportados for pequena. Para fazer uma exportação a partir de uma réplica de leitura, use as funções de exportação da Google Cloud consolagcloud ou da API REST na instância da réplica de leitura. Consulte o artigo Crie réplicas de leitura para mais informações sobre como criar e gerir réplicas de leitura.

  2. Use a exportação sem servidor. Com a exportação sem servidor, o Cloud SQL cria uma instância temporária separada para descarregar a operação de exportação. A descarga da operação de exportação permite que as bases de dados na instância principal continuem a servir consultas e realizar operações à taxa de desempenho habitual. Quando a exportação de dados estiver concluída, a instância temporária é eliminada automaticamente. Esta pode ser uma boa opção se estiver a fazer uma exportação única de uma grande base de dados. Use a Google Cloud consolagcloud ou as funções de exportação da API REST, com a flag offload, para executar uma operação de exportação sem servidor.

    Durante uma operação de exportação sem servidor, pode executar outras operações, como a edição, a importação e a comutação por falha de instâncias. No entanto, se selecionar delete, a operação de exportação é interrompida algum tempo depois de eliminar a instância e não exporta dados.

    Consulte a tabela seguinte para saber mais sobre as operações que podem ser bloqueadas enquanto uma operação de exportação sem servidor está em execução:
    Operação atual Nova operação Bloqueado?
    Qualquer operação Exportação sem servidor Sim
    Exportação sem servidor Qualquer operação, exceto a exportação sem servidor Não
    Qualquer operação, exceto a exportação sem servidor Qualquer operação, exceto a exportação sem servidor Sim

    Uma exportação sem servidor demora mais tempo do que uma exportação padrão, porque demora tempo a criar a instância temporária. No mínimo, demora mais de cinco minutos, mas pode demorar mais tempo para bases de dados maiores. Considere o impacto no tempo, no desempenho e no custo antes de determinar que tipo de exportação usar.

Use as flags corretas quando criar um ficheiro de captura SQL

Se não usar as flags corretas quando exporta os dados para um ficheiro de despejo SQL, a importação pode não ser bem-sucedida. Para obter informações sobre como criar um ficheiro de captura SQL para importação para o Cloud SQL, consulte o artigo Criar um ficheiro de captura SQL.

Comprima os dados para reduzir os custos

O Cloud SQL suporta a importação e a exportação de ficheiros comprimidos e não comprimidos. A compressão pode poupar um espaço de armazenamento significativo no Cloud Storage e reduzir os custos de armazenamento, especialmente quando exporta instâncias grandes.

Quando exporta um despejo SQL ou um ficheiro CSV, use uma .gzextensão de ficheiro para comprimir os dados. Quando importa um ficheiro com uma extensão .gz, este é descomprimido automaticamente.

Reduza os processos de importação e exportação de longa duração

As importações para o Cloud SQL e as exportações do Cloud SQL podem demorar muito tempo a serem concluídas, dependendo do tamanho dos dados que estão a ser processados. Isto pode ter os seguintes impactos:

  • Não pode parar uma operação de instância do Cloud SQL de execução prolongada.
  • Só pode realizar uma operação de importação ou exportação de cada vez para cada instância, e uma importação ou exportação de longa duração bloqueia outras operações, como as cópias de segurança automáticas diárias. As exportações sem servidor permitem-lhe executar outras operações, incluindo a edição de instâncias, a importação, a comutação por falha e o desbloqueio de cópias de segurança automáticas diárias.

Pode diminuir o tempo necessário para concluir cada operação usando a funcionalidade de importação ou exportação do Cloud SQL com lotes de dados mais pequenos.

Para exportações, pode efetuá-las a partir de uma réplica de leitura ou usar a exportação sem servidor para minimizar o impacto no desempenho da base de dados e permitir que outras operações sejam executadas na sua instância enquanto uma exportação está em execução.

Para mais sugestões, consulte o artigo Diagnosticar problemas com instâncias do Cloud SQL.

Use o InnoDB

O InnoDB é o único motor de armazenamento suportado para instâncias do MySQL.

Pode converter as suas tabelas de MyISAM para InnoDB encaminhando a saída de mysqldump através de um script sed da seguinte forma:

mysqldump --databases [DATABASE_NAME] \
-h [INSTANCE_IP] -u [USERNAME] -p [PASSWORD] \
--hex-blob --default-character-set=utf8mb4 | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > [DATABASE_FILE].sql

Tarefas de importação e migração do MySQL que contêm metadados com a cláusula DEFINER

Uma vez que uma tarefa de importação ou migração do MySQL não migra dados do utilizador, as origens e os ficheiros de despejo que contêm metadados definidos pelos utilizadores com a cláusula DEFINER não vão ser importados nem migrados, uma vez que os utilizadores ainda não existem aí.

Para identificar que valores DEFINER existem nos seus metadados, use as seguintes consultas (ou pesquise no ficheiro de despejo) e verifique se existem entradas para root%localhost ou utilizadores que não existem na instância de destino.

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS;

Para executar uma tarefa de importação ou migração a partir de uma origem que inclua esses metadados, pode fazer uma das seguintes ações:

  • Crie os utilizadores na instância do Cloud SQL de destino antes de iniciar a tarefa de importação ou migração.
  • Atualize a cláusula DEFINER para INVOKER na instância ou no ficheiro de despejo do MySQL de origem antes de iniciar a tarefa de importação ou migração.

Valide a base de dados importada

Após a conclusão de uma operação de importação, estabeleça ligação à sua base de dados e execute os comandos de base de dados adequados para se certificar de que o conteúdo está correto. Por exemplo, associe e liste as bases de dados, as tabelas e as entradas específicas.

Limitações conhecidas

Para ver uma lista de limitações conhecidas, consulte o artigo Problemas com a importação e exportação de dados.

Automatizar operações de exportação

Embora o Cloud SQL não ofereça uma forma integrada de automatizar as exportações da base de dados, pode criar a sua própria ferramenta de automatização com vários Google Cloud componentes. Para saber mais, consulte este tutorial.

Resolução de problemas

Resolução de problemas de operações de importação

Problema Resolução de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Já existe uma operação pendente para a sua instância. Só é permitida uma operação de cada vez. Experimente fazer o pedido depois de a operação atual estar concluída.
A operação de importação está a demorar demasiado tempo. Demasiadas associações ativas podem interferir com as operações de importação.

Feche operações não usadas. Verifique a utilização de memória e CPU da sua instância do Cloud SQL para se certificar de que existem muitos recursos disponíveis. A melhor forma de garantir o máximo de recursos para a importação é reiniciar a instância antes de começar a operação.

Um reinício:

  • Fecha todas as ligações.
  • Termina todas as tarefas que possam estar a consumir recursos.
Uma operação de importação pode falhar quando um ou mais utilizadores referenciados no ficheiro de captura não existem. Antes de importar um ficheiro de captura, todos os utilizadores de bases de dados que tenham objetos, ou aos quais foram concedidas autorizações relativamente a objetos na base de dados capturada, têm de existir na base de dados de destino. Caso contrário, a operação de importação não consegue recriar os objetos com a propriedade ou as autorizações originais.

Crie os utilizadores da base de dados antes da importação.

Uma operação de importação falha com um erro que indica que uma tabela não existe. As tabelas podem ter dependências de chaves externas noutras tabelas e, consoante a ordem das operações, uma ou mais dessas tabelas podem ainda não existir durante a operação de importação.

Opções que pode testar:

Adicione a seguinte linha no início do ficheiro de despejo:

SET FOREIGN_KEY_CHECKS=0;
  

Além disso, adicione esta linha no final do ficheiro de despejo:

SET FOREIGN_KEY_CHECKS=1;
  

Estas definições desativam as verificações de integridade de dados enquanto a operação de importação está em curso e reativam-nas após o carregamento dos dados. Isto não afeta a integridade dos dados na base de dados, porque os dados já foram validados durante a criação do ficheiro de despejo.

Resolução de problemas de operações de exportação

Problema Resolução de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Já existe uma operação pendente para a sua instância. Só é permitida uma operação de cada vez. Experimente fazer o pedido depois de a operação atual estar concluída.
HTTP Error 403: The service account does not have the required permissions for the bucket. Certifique-se de que o contentor existe e que a conta de serviço da instância do Cloud SQL (que está a fazer a exportação) tem a função Storage Object Creator (roles/storage.objectCreator) para permitir a exportação para o contentor. Consulte as funções de IAM para o Cloud Storage.
A exportação de CSV funcionou, mas a exportação de SQL falhou. Os formatos CSV e SQL são exportados de forma diferente. O formato SQL exporta toda a base de dados e, provavelmente, demora mais tempo a ser concluído. O formato CSV permite-lhe definir que elementos da base de dados incluir na exportação.

Use exportações de CSV para exportar apenas o que precisa.

A exportação está a demorar demasiado tempo. O Cloud SQL não suporta operações síncronas simultâneas.

Use a transferência de exportação. A um nível elevado, na descarga de exportação, em vez de emitir uma exportação na instância de origem, o Cloud SQL inicia uma instância de descarga para realizar a exportação. A transferência da exportação tem várias vantagens, incluindo um aumento do desempenho na instância de origem e o desbloqueio de operações administrativas enquanto a exportação está em execução. Com a transferência da exportação, a latência total pode aumentar pela quantidade de tempo que demora a apresentar a instância de transferência. Geralmente, para exportações de tamanho razoável, a latência não é significativa. No entanto, se a exportação for suficientemente pequena, pode notar o aumento na latência.

Quer que as exportações sejam automáticas. O Cloud SQL não oferece uma forma de automatizar as exportações.

Pode criar o seu próprio sistema de exportação automatizado usando produtos como o Cloud Scheduler, o Pub/Sub e as funções do Cloud Run, semelhantes a este artigo sobre a automatização de cópias de segurança. Google Cloud

O que se segue?