Melhores práticas para importação e exportação de dados

Esta página fornece práticas recomendadas para importar e exportar dados com o Cloud SQL. Para obter instruções passo a passo sobre como importar dados para o Cloud SQL, consulte Importação de Dados .

Para exportar dados do Cloud SQL para uso em uma instância do MySQL que você gerencia, consulte Exportar e importar usando arquivos de despejo SQL ou Exportar e importar usando arquivos CSV .

Melhores práticas para importação e exportação

A seguir estão algumas práticas recomendadas a serem consideradas ao importar e exportar dados:

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

A configuração do Modo SQL afeta a forma como o Cloud SQL interpreta as consultas SQL. Por exemplo, se você exportar de um banco de dados sem o SQL Estrito habilitado e tentar importar para o Cloud SQL (que habilita o SQL Estrito por padrão), a importação poderá falhar. A prática recomendada é usar o mesmo Modo SQL na importação que você usou para a exportação.

Verifique a compatibilidade do Modo SQL nos bancos de dados de origem e de destino. Preste atenção especial aos sinalizadores que ativam o Modo SQL Estrito. Se o SQL Estrito NÃO estiver definido no seu banco de dados, você provavelmente desejará removê-lo do Cloud SQL. Se você remover o SQL Estrito, precisará definir outro sinalizador.

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

Não use os buckets do Cloud Storage Requester Pays

Não é possível usar um bucket do Cloud Storage que tenha o Requester Pays habilitado para importações e exportações do Cloud SQL.

Minimize o impacto do desempenho das exportações

Para uma exportação padrão do Cloud SQL, a exportação é executada enquanto o banco de dados está online. Quando os dados exportados são menores, o impacto provavelmente é mínimo. No entanto, quando há bancos de dados grandes ou objetos grandes, como BLOBs, no banco de dados, existe a possibilidade de a exportação prejudicar o desempenho do banco de dados. Isso pode afetar o tempo necessário para executar consultas e operações no banco de dados. Após iniciar uma exportação, não será possível interrompê-la se o banco de dados começar a responder lentamente.

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

  1. Exporte a partir de uma réplica de leitura. Esta pode ser uma boa opção se você exporta com frequência (diariamente ou com mais frequência), mas a quantidade de dados exportados é pequena. Para exportar a partir de uma réplica de leitura, use o comando Google Cloud Funções de exportação de console, gcloud ou API REST na sua instância de réplica de leitura. Consulte Criar réplicas de leitura para obter mais informações sobre como criar e gerenciar 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. Descarregar a operação de exportação permite que os bancos de dados na instância primária continuem a atender consultas e executar operações na taxa de desempenho normal. Quando a exportação de dados for concluída, a instância temporária será excluída automaticamente. Esta pode ser uma boa opção se você estiver exportando um banco de dados grande apenas uma vez. Use o Google Cloud Funções de exportação de console, gcloud ou REST API, com o sinalizador offload , para executar uma operação de exportação sem servidor.

    Durante uma operação de exportação sem servidor, você pode executar outras operações, como edição de instância, importação e failover. No entanto, se você selecionar delete , a operação de exportação será interrompida algum tempo após a exclusão da instância e não exportará nenhum dado.

    Consulte a tabela a seguir para saber mais sobre as operações que podem ser bloqueadas enquanto uma operação de exportação sem servidor estiver 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 exportação sem servidor Não
    Qualquer operação, exceto exportação sem servidor Qualquer operação, exceto exportação sem servidor Sim

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

Use os sinalizadores corretos ao criar um arquivo de despejo SQL

Se você não usar os sinalizadores corretos ao exportar seus dados para um arquivo de despejo SQL, a importação poderá não ser bem-sucedida. Para obter informações sobre como criar um arquivo de despejo SQL para importação no Cloud SQL, consulte Criando um arquivo de despejo SQL .

Compactar dados para reduzir custos

O Cloud SQL oferece suporte à importação e exportação de arquivos compactados e descompactados. A compactação pode economizar espaço de armazenamento significativo no Cloud Storage e reduzir seus custos de armazenamento, especialmente ao exportar instâncias grandes.

Ao exportar um dump SQL ou um arquivo CSV, use a extensão .gz para compactar os dados. Ao importar um arquivo com a extensão .gz , ele será descompactado automaticamente.

Reduza os processos de importação e exportação demorados

Importações para o Cloud SQL e exportações a partir do Cloud SQL podem levar muito tempo para serem concluídas, dependendo do tamanho dos dados processados. Isso pode ter os seguintes impactos:

  • Não é possível interromper uma operação de instância de longa execução do Cloud SQL.
  • Você pode executar apenas uma operação de importação ou exportação por vez para cada instância, e uma importação ou exportação de longa duração bloqueia outras operações, como backups diários automatizados. Exportações sem servidor permitem que você execute outras operações, incluindo edição de instâncias, importação, failover e desbloqueio de backups diários automatizados.

Você 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 menores de dados.

Para exportações, você pode executar a exportação de uma réplica de leitura ou usar a exportação sem servidor para minimizar o impacto no desempenho do banco de dados e permitir que outras operações sejam executadas na sua instância enquanto uma exportação estiver em execução.

Para obter mais dicas, consulte Diagnosticando problemas com instâncias do Cloud SQL .

Usar InnoDB

InnoDB é o único mecanismo de armazenamento suportado para instâncias MySQL.

Você pode converter suas tabelas de MyISAM para InnoDB canalizando a saída do mysqldump por meio de um script sed da seguinte maneira:

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

Trabalhos de importação e migração do MySQL contendo metadados com cláusula DEFINER

Como uma tarefa de importação ou migração do MySQL não migra dados do usuário, as fontes e os arquivos de despejo que contêm metadados definidos pelos usuários com a cláusula DEFINER não serão importados ou migrados, pois os usuários ainda não existem lá.

Para identificar quais valores DEFINER existem em seus metadados, use as seguintes consultas (ou pesquise em seu arquivo de despejo) e verifique se há entradas para root%localhost ou usuários 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 de uma fonte que inclui esses metadados, você pode fazer o seguinte:

  • Crie os usuários na sua instância de destino do Cloud SQL antes de iniciar o trabalho de importação ou migração.
  • Atualize a cláusula DEFINER para INVOKER na sua instância MySQL de origem ou no arquivo de despejo antes de iniciar seu trabalho de importação ou migração.

Verifique o banco de dados importado

Após a conclusão da operação de importação, conecte-se ao seu banco de dados e execute os comandos apropriados para garantir que o conteúdo esteja correto. Por exemplo, conecte e liste os bancos de dados, tabelas e entradas específicas.

Limitações conhecidas

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

Automatizando operações de exportação

Embora o Cloud SQL não forneça uma maneira integrada de automatizar exportações de banco de dados, você pode criar sua própria ferramenta de automação usando vários Google Cloudcomponentes. Para saber mais, consulte este tutorial .

Solução de problemas

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

Emitir Solução de problemas
HTTP Error 409: Operation failed because another operation was already in progress . Já existe uma operação pendente para sua instância. Apenas uma operação é permitida por vez. Tente sua solicitação após a conclusão da operação atual.
A operação de importação está demorando muito. Muitas conexões ativas podem interferir nas operações de importação.

Feche as operações não utilizadas. Verifique o uso de CPU e memória da sua instância do Cloud SQL para garantir que haja recursos suficientes disponíveis. A melhor maneira de garantir o máximo de recursos para a importação é reiniciar a instância antes de iniciar a operação.

Um reinício:

  • Fecha todas as conexões.
  • Encerra quaisquer tarefas que possam estar consumindo recursos.
Uma operação de importação pode falhar quando um ou mais usuários referenciados no arquivo de despejo não existem. Antes de importar um arquivo de despejo, todos os usuários do banco de dados que possuem objetos ou receberam permissões sobre objetos no banco de dados de despejo devem existir no banco de dados de destino. Caso contrário, a operação de importação não conseguirá recriar os objetos com a propriedade ou as permissões originais.

Crie os usuários do banco de dados antes de importar.

Uma operação de importação falha com um erro informando que uma tabela não existe. As tabelas podem ter dependências de chaves estrangeiras em outras tabelas e, dependendo da ordem das operações, uma ou mais dessas tabelas podem ainda não existir durante a operação de importação.

Coisas para tentar:

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

SET FOREIGN_KEY_CHECKS=0;
  

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

SET FOREIGN_KEY_CHECKS=1;
  

Essas configurações desativam as verificações de integridade dos dados enquanto a operação de importação estiver em andamento e as reativam após o carregamento dos dados. Isso não afeta a integridade dos dados no banco de dados, pois os dados já foram validados durante a criação do arquivo de despejo.

Solução de problemas em operações de exportação

Emitir Solução de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Já existe uma operação pendente para sua instância. Apenas uma operação é permitida por vez. Tente sua solicitação após a conclusão da operação atual.
HTTP Error 403: The service account does not have the required permissions for the bucket. Verifique se o bucket existe e se a conta de serviço da instância do Cloud SQL (que está realizando a exportação) tem a função Storage Object Creator ( roles/storage.objectCreator ) para permitir a exportação para o bucket. Consulte Funções do IAM para o Cloud Storage .
A exportação CSV funcionou, mas a exportação SQL falhou. Os formatos CSV e SQL exportam de forma diferente. O formato SQL exporta o banco de dados inteiro e provavelmente leva mais tempo para ser concluído. O formato CSV permite definir quais elementos do banco de dados serão incluídos na exportação.

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

A exportação está demorando muito. O Cloud SQL não oferece suporte a operações síncronas simultâneas.

Use o descarregamento de exportação . Em um nível mais alto, no descarregamento de exportação, em vez de emitir uma exportação na instância de origem, o Cloud SQL inicia uma instância de descarregamento para executar a exportação. O descarregamento de exportação tem várias vantagens, incluindo maior desempenho na instância de origem e o desbloqueio de operações administrativas enquanto a exportação está em execução. Com o descarregamento de exportação, a latência total pode aumentar de acordo com o tempo necessário para ativar a instância de descarregamento. Geralmente, para exportações de tamanho razoável, a latência não é significativa. No entanto, se a sua exportação for pequena o suficiente, você poderá notar um aumento na latência.

Você quer que as exportações sejam automatizadas. O Cloud SQL não fornece uma maneira de automatizar exportações.

Você pode construir seu próprio sistema de exportação automatizado usando Google Cloudprodutos como Cloud Scheduler, Pub/Sub e funções do Cloud Run, semelhantes a este artigo sobre automação de backups .

O que vem a seguir