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

Esta página informa as práticas recomendadas para importar e exportar dados com o Cloud SQL. Para instruções passo a passo sobre como importar dados para o Cloud SQL, consulte Importar dados.

Para exportar dados do Cloud SQL para uso em uma instância do MySQL que você gerencia, consulte Como exportar dados.

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

Veja a seguir as práticas recomendadas a serem consideradas ao importar e exportar dados:

Use o mesmo modo SQL para importar e exportar

A configuração do modo SQL afeta a forma como o Cloud SQL interpreta consultas SQL. Por exemplo, se você exportar de um banco de dados sem o modo restrito do SQL ativado e, em seguida, tentar importar para o Cloud SQL (que ativa por padrão o modo restrito do SQL), a importação poderá falhar. A prática recomendada é usar o mesmo modo SQL usado para a exportação na importação.

Verifique o modo SQL nos bancos de dados de origem e de destino quanto à compatibilidade. Preste atenção às sinalizações que ativam o modo restrito do SQL. Se o modo restrito do SQL NÃO estiver definido no banco de dados, convém removê-lo no Cloud SQL. Se você remover o modo restrito do SQL, precisará definir outra sinalização.

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

Não use os buckets dos pagamentos do solicitante do Cloud Storage

Não é possível usar um bucket do Cloud Storage que tem a opção Pagamentos do solicitante ativada para operações de importação e exportação do Cloud SQL.

Usar a exportação sem servidor para descarregar a operação de exportação da instância principal

Para uma exportação padrão do Cloud SQL, o processo é executado enquanto o banco de dados está on-line. Quando os bancos de dados que estão sendo exportados são menores, é provável que o impacto seja mínimo. No entanto, quando há bancos de dados grandes ou objetos maiores, como BLOBs, é possível que a exportação prejudique o desempenho do banco de dados. Isso pode afetar o tempo necessário para fazer consultas e operações no banco de dados. Depois de iniciar uma exportação, não será possível interrompê-la caso seu banco de dados comece a responder lentamente.

Para evitar respostas lentas durante uma exportação, use o processo sem servidor. Esse tipo de exportação permite que o Cloud SQL crie uma instância temporária separada para descarregar a operação de exportação. O descarregamento da operação de exportação permite que os bancos de dados na instância principal continuem a exibir consultas e realizar operações com a taxa de desempenho normal. Quando a exportação de dados é concluída, a instância temporária é excluída automaticamente.

Use as funções de exportação da API gcloud ou REST, com a sinalização offload, para executar uma operação de exportação sem servidor.

Durante uma operação de exportação sem servidor, é possível executar algumas outras operações, como edição, importação e failover da instância. No entanto, se você selecionar delete, a operação de exportação será interrompida algum tempo depois da exclusão da instância e não exportará dados.

Uma exportação sem servidor demora mais do que a padrão, porque leva tempo para criar a instância temporária. Esse processo pode levar mais de cinco minutos, no mínimo. No entanto, bancos de dados maiores podem precisar de mais tempo. Considere o impacto no tempo e no desempenho antes de determinar que tipo de exportação será usada.

Use a exportação sem servidor em uma instância principal ou em uma réplica de leitura.

Use as sinalizações corretas ao criar um arquivo dump SQL

Se você não usar as sinalizações corretas ao exportar dados para um arquivo dump SQL, pode ocorrer uma falha na importação. Para saber como criar um arquivo dump SQL para ser importado para o Cloud SQL, consulte Como criar um arquivo dump SQL.

Compactar dados para reduzir custos

O Cloud SQL permite a importação e exportação de arquivos compactados e não compactados. A compactação pode economizar um espaço de armazenamento significativo no Cloud Storage e reduzir os custos com armazenamento, principalmente durante a exportação de grandes instâncias.

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

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

As importações e exportações para o Cloud SQL que usam a função de importação (por meio de um bucket do Cloud Storage) podem demorar muito para serem concluídas, dependendo do tamanho do banco de dados. Esse processo pode ter os seguintes impactos:

  • Não é possível interromper uma operação de instância do Cloud SQL de longa duração.
  • Apenas uma operação de importação ou exportação pode ser executada por vez para cada instância.

É possível diminuir o tempo necessário para concluir cada operação usando a função de importação ou exportação do Cloud SQL com lotes menores de dados.

Para exportações, use a opçã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 a exportação é feita.

Para mais dicas, confira Como diagnosticar problemas nas instâncias do Cloud SQL.

Usar o InnoDB

O InnoDB é o único mecanismo de armazenamento compatível com instâncias do MySQL.

É possível converter as tabelas de MyISAM para InnoDB. Faça isso ao ligar a saída de 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

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

Como um job de importação ou migração do MySQL não migra dados de usuários, as fontes e os arquivos dump que contêm metadados definidos pelos usuários com a cláusula DEFINER não serão importados nem migrados porque os usuários ainda não existem.

Para identificar quais valores DEFINER existem nos seus metadados, use as seguintes consultas (ou pesquise no 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 um job de importação ou migração de uma fonte que inclua esses metadados, siga um destes procedimentos:

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

Verifique o banco de dados importado

Após a conclusão de uma 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-se e liste os bancos de dados, tabelas e entradas específicas.

Limitações conhecidas

O Cloud Storage é compatível com um tamanho máximo de objeto único de até cinco terabytes. Se você tiver bancos de dados maiores que cinco TB, a operação de exportação para o Cloud Storage falhará. Nesse caso, é preciso dividir os arquivos de exportação em segmentos menores.

Solução de problemas

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
A importação está demorando demais. Muitas conexões ativas podem interferir nas operações de importação. Feche as conexões não usadas ou reinicie a instância do Cloud SQL antes de iniciar uma operação de importação.
A importação falhou. O arquivo exportado pode conter usuários do banco de dados que ainda não existem. Limpe o banco de dados com falha antes de tentar realizar a importação novamente. Crie os usuários do banco de dados antes de fazer a importação.
Erro durante a importação: a tabela não existe. Uma tabela obrigatória não existe no momento. Desative FOREIGN_KEY_CHECKS no início da importação.
Mensagem de erro: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost' Há um DEFINER no arquivo dump que não existe no banco de dados. Veja mais informações sobre o uso de DEFINER e possíveis soluções alternativas no Cloud SQL.
Mensagem de erro: Unknown table 'COLUMN_STATISTICS' in information_schema Isso acontece se você usar o binário mysqldump do MySQL 8.0 para fazer dump de dados de um banco de dados MySQL 5.7 e importá-los para um banco de dados MySQL 8.0. Se você fizer dump de dados de um banco de dados MySQL 5.7 e importá-los para um banco de dados MySQL 8.0, use o binário mysqldump do MySQL 5.7. Se você usar o binário mysqldump do MySQL 8.0, precisará adicionar a sinalização --column-statistics=0.

A importação está demorando demais

A importação está demorando muito, o que bloqueia outras operações.

O problema pode ser

Muitas conexões ativas podem interferir nas operações de importação. As conexões consomem CPU e memória, limitando os recursos disponíveis.

O que você pode tentar

Feche operações não usadas. Verifique o uso de CPU e da memória para garantir que há vários recursos disponíveis. A melhor maneira de garantir o máximo de recursos para a operação de importação é reiniciar a instância antes de começar a operação. Uma reinicialização:

  • fecha todas as conexões;
  • encerra todas as tarefas que possam estar consumindo recursos.


Falha na importação

A importação falha quando um ou mais usuários referenciados no arquivo de despejo SQL exportado não existem.

O problema pode ser

Antes de importar um arquivo de dump SQL, todos os usuários do banco de dados que têm objetos ou receberam permissões nos objetos no banco de dados despejado precisam existir. Caso contrário, a restauração não recriará os objetos com a propriedade e/ou as permissões originais.

O que você pode tentar

Limpe o banco de dados com falha antes de tentar realizar a importação novamente. Crie os usuários do banco de dados antes de importar o dump SQL.


Erro durante a importação: a tabela não existe

Uma operação de importação falha com um erro de que uma tabela não existe.

Possível problema

As tabelas podem ter dependências de chave externa em outras tabelas e, dependendo da ordem das operações, uma ou mais delas ainda não existem durante a operação de importação.

O que você deve tentar

Adicione a seguinte linha no início do arquivo dump:

  SET FOREIGN_KEY_CHECKS=0;

Além disso, adicione esta linha ao final do arquivo dump:

  SET FOREIGN_KEY_CHECKS=1;

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


Mensagem de erro: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'

Você verá o erro ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'.

Possível problema

A causa raiz é que um usuário no arquivo dump com a cláusula DEFINER não existe no banco de dados, e que esse usuário tem referência cruzada nas definições de objetos no banco de dados.

O que você pode tentar

Consulte este documento sobre como importar um banco de dados com cláusulas DEFINER no arquivo dump. Talvez seja necessário criar primeiro um ou mais usuários no banco de dados.


Mensagem de erro: tabela desconhecida "COLUMN_STATISTICS" em information_schema

Você vê a mensagem de erro Unknown table 'COLUMN_STATISTICS' in information_schema.

Possível problema

Isso acontece se você usar o binário mysqldump do MySQL 8.0 para fazer dump de dados de um banco de dados MySQL 5.7 e importá-los para um banco de dados MySQL 8.0.

O que você pode tentar

Se você fizer dump de dados de um banco de dados MySQL 5.7 e importá-los para um banco de dados MySQL 8.0, use o binário mysqldump do MySQL 5.7. Se você usar o binário mysqldump do MySQL 8.0, precisará adicionar a sinalização --column-statistics=0.

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
Não é possível ver o status da operação. A interface do usuário mostra apenas sucesso ou falha. Use estes comandos do banco de dados para saber mais.
408 Error (Timeout) durante a exportação. A exportação do SQL pode demorar muito, dependendo do tamanho do banco de dados e do conteúdo exportado. Use várias exportações de CSV para reduzir o tamanho de cada operação.
A exportação de CSV funcionou, mas a exportação de SQL falhou. A exportação de SQL tem mais chances de ter problemas de compatibilidade com o Cloud SQL. Use exportações de CSV para exportar apenas o que você precisa.
A exportação está demorando muito. O Cloud SQL não é compatível com operações síncronas simultâneas. Use o descarregamento de exportação. Saiba mais.
Error 1412: Table definition has changed. A tabela foi alterada durante a exportação. Remova todas as instruções de alteração de tabela da operação de despejo.
Conexão fechada durante a operação de exportação. A consulta precisa produzir dados nos primeiros sete minutos. Teste a consulta manualmente. Saiba mais.
Erro desconhecido durante a exportação. Possível problema de largura de banda. Verifique se a instância e o bucket do Cloud Storage estão na mesma região.
Você quer automatizar as exportações. O Cloud SQL não oferece uma maneira de automatizar exportações. Crie seu próprio pipeline para executar essa funcionalidade. Saiba mais.
Mensagem de erro: Access denied; you need (at least one of) the SUPER privilege(s) for this operation Pode haver um evento, uma visualização, uma função ou um procedimento no arquivo dump usando superusuario@localhost (como o root@localhost). Isso não é compatível com o Cloud SQL. Saiba mais sobre o uso de DEFINER e as possíveis soluções alternativas no Cloud SQL.

Não é possível ver o status da operação

Não é possível ver o status de uma operação em andamento.

O problema pode ser

O Console do Google Cloud informa apenas o sucesso ou falha no momento da conclusão e não foi projetado para retornar avisos.

O que você pode tentar

Conecte-se ao banco de dados e execute SHOW WARNINGS.


Erro 408 (tempo limite) durante a exportação

Você vê a mensagem de erro 408 Error (Timeout) ao executar um job de exportação no Cloud SQL.

O problema pode ser

Os formatos CSV e SQL são exportados de maneira diferente. O formato SQL exporta todo o banco de dados 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.

O que você pode tentar

Use o formato CSV e execute vários jobs de exportação menores para reduzir o tamanho e a duração de cada operação.


A exportação de CSV funcionou, mas a exportação de SQL falhou

A exportação de CSV funcionou, mas a exportação de SQL falhou.

Possível problema

Os formatos CSV e SQL são exportados de maneira diferente. O formato SQL exporta todo o banco de dados 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.

O que você pode tentar

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


A exportação está demorando muito

A exportação está demorando muito, bloqueando outras operações.

O problema pode ser

O Cloud SQL não é compatível com operações síncronas simultâneas.

O que você pode tentar

Tente exportar conjuntos de dados cada vez menores.


mysqldump: erro 1412: a definição da tabela foi alterada

Você vê a mensagem de erro mysqldump: Error 1412: Table definition has changed, retry transaction when dumping the table.

Possível problema

Durante o processo de exportação, houve uma alteração na tabela.

O que você deve tentar

A transação de despejo poderá falhar se você usar as seguintes instruções durante a operação de exportação:

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
Remova qualquer uma dessas instruções da operação de despejo.


Conexão fechada durante a operação de exportação

Conexão fechada durante a operação de exportação.

O problema pode ser

A conexão com o Cloud Storage pode expirar porque a consulta em execução na exportação não está produzindo nenhum dado nos primeiros sete minutos desde que a exportação foi iniciada.

O que você pode tentar

Teste a consulta manualmente conectando-se a partir de qualquer cliente e enviando a saída da consulta para STDOUT com o comando abaixo:

COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' ).

Esse é o comportamento esperado, porque quando a exportação é iniciada, o cliente deve começar a enviar dados imediatamente. Caso a conexão continue sem dados enviados, ela acaba sendo interrompida e, por fim, resultando em falha na exportação e deixando a operação em um estado incerto. Além disso, é isso que a mensagem de erro do gcloud está tentando dizer com esta mensagem:

operation is taking longer than expected.


Erro desconhecido durante a exportação

Você verá a mensagem de erro Unknown error ao tentar exportar um banco de dados para um bucket do Cloud Storage.

O problema pode ser

A transferência pode falhar devido a um problema de largura de banda.

O que você pode tentar

A instância do Cloud SQL pode estar em uma região diferente do bucket do Cloud Storage. A leitura e a gravação de dados de um continente para outro envolve o uso excessivo de rede e pode causar problemas intermitentes como esse. Verifique as regiões da instância e do bucket.


Querer automatizar exportações

Você quer automatizar as exportações.

O problema pode ser

O Cloud SQL não oferece uma maneira de automatizar exportações.

O que você pode tentar

É possível criar seu próprio sistema de exportação automatizada usando produtos do Google Cloud, como Cloud Scheduler, Pub/Sub e Cloud Functions.


Houve um erro de sistema ERROR_RDBMS

Você vê a mensagem de erro [ERROR_RDBMS] system error occurred.

O problema pode ser

  • O usuário pode não ter todas as permissões necessárias do Cloud Storage.
  • A tabela de banco de dados pode não existir.

O que você pode tentar

  1. Verifique se você tem pelo menos as permissões WRITER no bucket e READER no arquivo de exportação. Para mais informações sobre como configurar o controle de acesso no Cloud Storage, consulte Criar e gerenciar listas de controle de acesso.
  2. Verifique se a tabela existe. Se a tabela existir, confirme se você tem as permissões corretas no bucket.

Acesso negado. Você precisa de (pelo menos um dos) privilégios de SUPER para esta operação

Você verá o erro Access denied; you need (at least one of) the SUPER privilege(s) for this operation.

Possível problema

Pode haver um evento, uma visualização, uma função ou um procedimento no arquivo dump usando superusuario@localhost (como root@localhost). Isso não é compatível com o Cloud SQL.

O que você pode tentar

Consulte este documento sobre como importar um banco de dados com cláusulas DEFINER.

A seguir