Importar dados para o Cloud SQL

Nesta página, descrevemos como importar dados para instâncias do Cloud SQL. É possível importar dados de arquivos dump SQL ou CSV.

Clique no link a seguir e conheça as Práticas recomendadas para importar e exportar dados.

Depois de concluir uma operação de importação, verifique os resultados.

Antes de começar

Verifique se você configurou os papéis e permissões necessários. Esses procedimentos exigem que você importe um arquivo do Cloud Storage. Para importar dados do Cloud Storage, a conta de serviço ou o usuário da instância do Cloud SQL precisa ter:

  • O papel Administrador do Cloud SQL ou um papel personalizado que inclua a permissão cloudsql.instances.import.
  • O papel do IAM roles/storage.LegacyObjectReader (que tem a permissão storage.objects.get)
  • Se a conta de serviço ou o usuário também estiver executando operações de exportação, conceda a permissão cloudsql.instances.export e o papel do IAM roles/storage.legacyBucketWriter.

Para receber ajuda com os papéis do IAM, consulte Cloud Identity and Access Management para o Cloud Storage.

Encontre o nome da conta de serviço da instância na página Visão geral da instância no Console do Google Cloud. Verifique os papéis do bucket do Cloud Storage usando a ferramenta gsutil:

gsutil iam get gs://[BUCKET_NAME]

Saiba mais sobre como usar o IAM com buckets.

Como importar dados de um arquivo dump SQL para o Cloud SQL

  • Crie um arquivo dump SQL. Use as instruções do marcador abaixo que se aplicam à sua situação. Essas instruções definem certas sinalizações que tornam o arquivo dump compatível com o Cloud SQL.

  • O banco de dados e a tabela em que você está importando já precisam existir em sua instância do Cloud SQL. Para ajuda sobre a criação de um banco de dados, consulte Como criar um banco de dados. Para criar uma tabela, use a instrução SQL CREATE TABLE no cliente mysql.
  • A operação de importação tenta executar os comandos SQL no arquivo sqldump, como excluir e recriar tabelas, entradas e índices. Para ajuda sobre a criação de um banco de dados, consulte Como criar um banco de dados.
  • Não use um usuário do sistema (por exemplo, root@localhost) como DEFINER para acionadores, visualizações ou procedimentos armazenados. Você não terá acesso a esse usuário no Cloud SQL.
  • Se o arquivo dump SQL contiver cláusulas DEFINER(visualizações, gatilhos ou procedimentos armazenados), dependendo da ordem de execução dessas instruções, a importação poderá falhar. Saiba mais sobre o uso de DEFINER e as possíveis soluções alternativas no Cloud SQL.
  • Para informações sobre como criar um arquivo dump SQL que pode ser importado para o Cloud SQL, consulte Como criar um arquivo dump SQL.
  • Para importar dados de um arquivo dump SQL para uma instância do Cloud SQL:

    Console

    1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.

      Acesse a página "Instâncias" do Cloud SQL

    2. Selecione a instância para abrir a página Visão geral correspondente.
    3. Clique em Importar na barra de botões.
    4. Em Escolha o arquivo do qual você quer importar dados, insira o caminho para o bucket e o arquivo dump SQL que será usado para a importação. Ou navegue até o arquivo:
      1. Clique em Pesquisar.
      2. Em Local, clique duas vezes no nome do bucket na lista.
      3. Selecione o arquivo na lista.
      4. Clique em Selecionar.

      É possível importar um arquivo compactado (.gz) ou descompactado (.sql).

    5. Em Formato, selecione SQL.
    6. Selecione o banco de dados que receberá os dados importados.

      Isso faz com que o Cloud SQL execute a instrução USE DATABASE antes da importação.

    7. Clique em Importar para iniciar a importação.

    gcloud

    1. Crie um bucket do Cloud Storage, caso ainda não tenha feito isso.

      Se precisar de ajuda para criar um bucket, consulte Como criar buckets do Storage.

    2. Faça upload do arquivo no seu bucket.

      Para receber ajuda com o upload de arquivos para buckets, consulte Como fazer upload de objetos.

    3. Descreva a instância para a qual está fazendo a importação:
      gcloud sql instances describe [INSTANCE_NAME]
      
    4. Copie o campo serviceAccountEmailAddress.
    5. Use gsutil iam para conceder o papel do IAM storage.objectAdminà conta de serviço do bucket.
        gsutil iam ch serviceAccount:[SERVICE-ACCOUNT]:objectAdmin \
        gs://[BUCKET-NAME]
        
      Para ajuda com a configuração de permissões do IAM, consulte Como usar as permissões do Cloud IAM.
    6. Importe o banco de dados:
      gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME] \
                                  --database=[DATABASE_NAME]
      

      Para informações sobre como usar o comando import sql, consulte a página de referência do comando sql import sql.

      Se o comando retornar um erro como "ERROR_RDBMS", analise as permissões. Esse erro costuma surgir de problemas de permissões.

    7. Se não for necessário manter as permissões do IAM definidas anteriormente, remova-as usando gsutil iam.

    API REST v1beta4

      Crie um arquivo dump SQL. Use as instruções do marcador abaixo que se aplicam à sua situação. Essas instruções definem certas sinalizações que tornam o arquivo dump compatível com o Cloud SQL.

    1. Crie um bucket do Cloud Storage, caso ainda não tenha feito isso.

      Se precisar de ajuda para criar um bucket, consulte Como criar buckets do Storage.

    2. Faça upload do arquivo no seu bucket.

      Para receber ajuda com o upload de arquivos para buckets, consulte Como fazer upload de objetos.

    3. Forneça à instância o papel do IAM storage.objectAdmin no seu bucket. Para ajuda com a configuração de permissões do IAM, consulte Como usar as permissões do Cloud IAM.
    4. Importe seu arquivo dump:

      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
      • bucket_name: o nome do bucket do Cloud Storage
      • path_to_sql_file: o caminho para o arquivo SQL
      • database_name: o nome de um banco de dados dentro da instância do Cloud SQL

      Método HTTP e URL:

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

      Corpo JSON da solicitação:

      {
       "importContext":
         {
            "fileType": "SQL",
            "uri": "gs://bucket_name/path_to_sql_file",
            "database": "database_name"
          }
      }
      
      

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

      Você receberá uma resposta JSON semelhante a esta:

      Para ver a lista completa de parâmetros dessa solicitação, consulte a página instances:import.
    5. Se você não precisa manter as permissões do IAM definidas anteriormente, remova-as agora.
    Para ver como a solicitação da API REST subjacente é criada nesta tarefa, consulte o Explorador de APIs na página "instances:import".

    Como importar dados de um arquivo CSV para o Cloud SQL

    Requisitos de formato do arquivo CSV

    Arquivos CSV precisam ter uma linha para cada linha de dados e campos separados por vírgula. O formato de arquivos CSV aceito pelo Cloud SQL equivale a usar as seguintes instruções do MySQL:
          LOAD DATA INFILE ... CHARACTER SET 'utf8mb4'
          FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'.
    
    Para criar um CSV nesse formato, verifique se sua exportação usa as mesmas opções ou delimitadores usados para importação pelo Cloud SQL ao exportar seus dados de um banco de dados atual. Consulte Como criar um arquivo CSV para ver um exemplo.

    Para importar dados para uma instância do Cloud SQL usando um arquivo CSV:

    Console

    1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.

      Acesse a página "Instâncias" do Cloud SQL

    2. Selecione a instância para abrir a página Visão geral correspondente.
    3. Clique em Importar na barra de botões.
    4. Em Escolha o arquivo do qual você quer importar dados, insira o caminho para o bucket e o arquivo CSV para a importação. Ou navegue até o arquivo:
      1. Clique em Pesquisar.
      2. Em Local, clique duas vezes no nome do bucket na lista.
      3. Selecione o arquivo na lista.
      4. Clique em Selecionar.

      É possível importar um arquivo compactado (.gz) ou descompactado (.csv).

    5. Em Formato, selecione CSV.
    6. Especifique o Banco de dados e a Tabela na instância do Cloud SQL em que você quer importar o arquivo CSV.
    7. Você pode, opcionalmente, especificar um usuário para usar na importação.
    8. Clique em Importar para iniciar a importação.

    gcloud

    1. Crie um bucket do Cloud Storage, caso ainda não tenha feito isso.

      Se precisar de ajuda para criar um bucket, consulte Como criar buckets do Storage.

    2. Faça upload do arquivo no seu bucket.

      Para receber ajuda com o upload de arquivos para buckets, consulte Como fazer upload de objetos.

    3. Faça upload dos dados do arquivo CSV para o bucket.
    4. Descreva a instância usada para exportar:
      gcloud sql instances describe [INSTANCE_NAME]
      
    5. Copie o campo serviceAccountEmailAddress.
    6. Use gsutil iam para conceder o papel do IAM storage.objectAdmin à conta de serviço do bucket. Para ajuda com a configuração de permissões do IAM, consulte Como usar as permissões do Cloud IAM.
    7. Importe o arquivo:
      gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                  --database=[DATABASE_NAME] --table=[TABLE_NAME]
      

      Para informações sobre como usar o comando import csv, consulte a página de referência do comando sql import csv.

    8. Se não for necessário manter as permissões do IAM definidas anteriormente, remova-as usando gsutil iam.

    API REST v1beta4

    1. Crie um bucket do Cloud Storage, caso ainda não tenha feito isso.

      Se precisar de ajuda para criar um bucket, consulte Como criar buckets do Storage.

    2. Faça upload do arquivo no seu bucket.

      Para receber ajuda com o upload de arquivos para buckets, consulte Como fazer upload de objetos.

    3. Forneça à instância o papel do IAM storage.objectAdmin no seu bucket. Para ajuda com a configuração de permissões do IAM, consulte Como usar as permissões do Cloud IAM.
    4. Importe o arquivo:

      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
      • bucket_name: o nome do bucket do Cloud Storage
      • path_to_csv_file: o caminho para o arquivo CSV
      • database_name: o nome de um banco de dados dentro da instância do Cloud SQL
      • table_name: o nome da tabela do banco de dados

      Método HTTP e URL:

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

      Corpo JSON da solicitação:

      {
       "importContext":
         {
            "fileType": "CSV",
            "uri": "gs://bucket_name/path_to_csv_file",
            "database": "database_name",
            "csvImportOptions":
             {
               "table": "table_name"
             }
         }
      }
      
      

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

      Você receberá uma resposta JSON semelhante a esta:

      Para ver a lista completa de parâmetros dessa solicitação, consulte a página instances:import.
    5. Se você não precisar manter as permissões do Cloud IAM definidas anteriormente, remova-as.

    Se você receber um erro como ERROR_RDBMS, verifique se a tabela existe. Se a tabela existir, confirme se você tem as permissões corretas no bucket. Para receber ajuda para configurar o controle de acesso no Cloud Storage, consulte Criar e gerenciar listas de controle de acesso.

    Para ver como a solicitação da API REST subjacente é criada nesta tarefa, consulte o Explorador de APIs na página "instances:import".

    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.

    A seguir