Exporte e importe através de ficheiros CSV

Esta página descreve a exportação e a importação de dados para instâncias do Cloud SQL através de ficheiros CSV.

Antes de começar

Antes de iniciar uma operação de exportação ou importação:

  • Certifique-se de que a sua base de dados tem espaço livre adequado.
  • As operações de exportação e importação usam recursos da base de dados, mas não interferem com as operações normais da base de dados, a menos que a instância tenha um aprovisionamento insuficiente.

  • Verifique se o ficheiro CSV tem os dados esperados e se está no formato correto. Os ficheiros CSV têm de ter uma linha para cada linha de campos de dados.
  • Siga as práticas recomendadas para exportar e importar dados.

Exporte dados do Cloud SQL para MySQL

Funções e autorizações necessárias para exportar a partir do Cloud SQL para MySQL

Para exportar dados do Cloud SQL para o Cloud Storage, o utilizador que inicia a exportação tem de ter uma das seguintes funções:

Além disso, a conta de serviço da instância do Cloud SQL tem de ter uma das seguintes funções:

  • A storage.objectAdminfunção de gestão de identidade e de acesso (IAM)
  • Uma função personalizada, incluindo as seguintes autorizações:
    • storage.objects.create
    • storage.objects.list (apenas para exportar ficheiros em paralelo)
    • storage.objects.delete (apenas para exportar ficheiros em paralelo)

Para obter ajuda com as funções de IAM, consulte o Identity and Access Management.

Exporte dados para um ficheiro CSV a partir do Cloud SQL para MySQL

Pode exportar os seus dados no formato CSV, que é utilizável por outras ferramentas e ambientes. As exportações ocorrem ao nível da base de dados. Durante uma exportação CSV, pode especificar os esquemas a exportar. Todos os esquemas ao nível da base de dados são elegíveis para exportação.

Para exportar dados de uma base de dados numa instância do Cloud SQL para um ficheiro CSV num contentor do Cloud Storage:

Consola

  1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Para abrir a página Vista geral de uma instância, clique no nome da instância.
  3. Clique em Exportar.
  4. Selecione Exportação de transferência para permitir que outras operações ocorram enquanto a exportação está em curso.
  5. Clique em Mostrar opções avançadas.
  6. Na secção Base de dados, selecione o nome da base de dados no menu pendente.
  7. Para Consulta SQL, introduza uma consulta SQL para especificar a tabela a partir da qual exportar dados.

    Por exemplo, para exportar todo o conteúdo da tabela entries na base de dados guestbook, introduza

    SELECT * FROM guestbook.entries;
    A sua consulta tem de especificar uma tabela na base de dados especificada. Não pode exportar uma base de dados completa no formato CSV.

  8. Clique em Exportar para iniciar a exportação.
  9. A caixa Exportar base de dados? é aberta com uma mensagem a indicar que o processo de exportação pode demorar uma hora ou mais para bases de dados grandes. Durante a exportação, a única operação que pode realizar na instância é ver informações. Depois de iniciar a exportação, pode cancelar a operação. Se for uma boa altura para iniciar uma exportação, clique em Exportar. Caso contrário, clique em Cancelar.

gcloud

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Encontre a conta de serviço da instância do Cloud SQL a partir da qual está a fazer a exportação. Pode fazê-lo executando o comando gcloud sql instances describe. Procure o campo serviceAccountEmailAddress no resultado.
    gcloud sql instances describe INSTANCE_NAME
  4. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectAdmin função do IAM à conta de serviço da instância do Cloud SQL. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  5. Exporte a base de dados:
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

    Para obter informações sobre a utilização do comando export csv, consulte a página de referência do comando sql export csv

  6. Se não precisar de manter a função do IAM que definiu anteriormente, revogue-a agora.

REST v1

  1. Crie um contentor para a exportação:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    Este passo não é obrigatório, mas é vivamente recomendado para não abrir o acesso a outros dados.

  2. Disponibilize à sua instância a legacyBucketWriter função de IAM para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  3. Exporte a sua base de dados:

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • offload: ativa a exportação sem servidor. Defina como true para usar a exportação sem servidor.
    • select_query: consulta SQL para exportação (opcional)
    • escape_character: o caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • quote_character:o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": "database_name",
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query",
               "escapeCharacter":"escape_character",
               "quoteCharacter":"quote_character",
               "fieldsTerminatedBy":"fields_terminated_by",
               "linesTerminatedBy":"lines_terminated_by"
           }
       }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Se a consulta de seleção especificar uma base de dados, substitui a propriedade databases.

  4. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as agora.
Para ver a lista completa de parâmetros do pedido, consulte a página instances:export.

REST v1beta4

  1. Crie um contentor para a exportação:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    Este passo não é obrigatório, mas é vivamente recomendado para não abrir o acesso a outros dados.

  2. Disponibilize à sua instância a storage.objectAdmin função de IAM para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  3. Exporte a sua base de dados:

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • offload: ativa a exportação sem servidor. Defina como true para usar a exportação sem servidor.
    • select_query: consulta SQL para exportação (opcional)
    • escape_character: o caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "22" representa as aspas duplas. (opcional)
    • quote_character: o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": "database_name",
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery": "select_query",
               "escapeCharacter":  "escape_character",
               "quoteCharacter": "quote_character",
               "fieldsTerminatedBy": "fields_terminated_by",
               "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Se a consulta de seleção especificar uma base de dados, substitui a propriedade databases.

  4. Se não precisar de manter a função do IAM que definiu anteriormente, revogue-a agora.
Para ver a lista completa de parâmetros do pedido, consulte a página instances:export.

Personalize o formato de um ficheiro de exportação CSV

Pode usar gcloud ou a API REST para personalizar o formato do ficheiro CSV. Quando faz uma exportação, pode especificar as seguintes opções de formatação:

Opção CSV Valor predefinido flag gcloud Propriedade da API REST Descrição
Escape

"5C"

Código hexadecimal ASCII para o separador de ficheiros.

--escape escapeCharacter

Caráter que aparece antes de um caráter de dados que tem de ser ignorado.

Disponível apenas para MySQL e PostgreSQL.

Citação

"22"

Código hexadecimal ASCII para aspas duplas.

--quote quoteCharacter

Carater que inclui valores de colunas com um tipo de dados de string.

Disponível apenas para MySQL e PostgreSQL.

Delimitador de campo

"2C"

Código hexadecimal ASCII para vírgula.

--fields-terminated-by fieldsTerminatedBy

Caráter que divide os valores das colunas.

Disponível apenas para MySQL e PostgreSQL.

Caráter de nova linha

"0A"

Código hexadecimal ASCII para nova linha.

--lines-terminated-by linesTerminatedBy

Caráter que divide os registos de linhas.

Disponível apenas para o MySQL.

Por exemplo, um comando gcloud que use todos estes argumentos pode ser semelhante ao seguinte:

gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--offload \
--query=SELECT_QUERY \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

O corpo do pedido da API REST equivalente teria o seguinte aspeto:

{
 "exportContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "databases": ["DATABASE_NAME"],
      "offload": true,
      "csvExportOptions":
       {
           "selectQuery": "SELECT_QUERY",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

Os exemplos de API e gcloud anteriores são equivalentes à execução da seguinte declaração SQL:

SELECT [QUERY] INTO OUTFILE ... CHARACTER SET 'utf8mb4'
            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
            ESCAPED BY '\\' LINES TERMINATED BY '\n'

Importe dados para o Cloud SQL para MySQL

Funções e autorizações necessárias para a importação para o Cloud SQL para MySQL

Para importar dados do Cloud Storage para o Cloud SQL, o utilizador que inicia a importação tem de ter uma das seguintes funções:

Além disso, a conta de serviço da instância do Cloud SQL tem de ter uma das seguintes funções:

  • A função de IAM storage.objectAdmin
  • Uma função personalizada, incluindo as seguintes autorizações:
    • storage.objects.get
    • storage.objects.list (apenas para importar ficheiros em paralelo)

Para obter ajuda com as funções de IAM, consulte o Identity and Access Management.

Exporte dados do seu servidor MySQL local para um ficheiro CSV

Para exportar uma tabela do MySQL para importação para o Cloud SQL, recomendamos que formate o ficheiro com o seguinte comando:

mysql --host=INSTANCE_IP --user=USER_NAME --password DATABASE \
-e " SELECT * FROM TABLE INTO OUTFILE 'FILE_NAME' CHARACTER SET 'utf8mb4'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' "

Pode personalizar o formato do seu ficheiro de exportação CSV.

Importe dados de um ficheiro CSV para o Cloud SQL para MySQL

Requisitos de formato de ficheiro CSV

Os ficheiros CSV têm de ter uma linha para cada linha de dados e usar campos separados por vírgulas.

Para importar dados para uma instância do Cloud SQL através de um ficheiro CSV:

Consola

  1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Para abrir a página Vista geral de uma instância, clique no nome da instância.
  3. Clique em Importar.
  4. Na secção Selecionar ficheiro de origem, introduza o caminho para o contentor e o ficheiro CSV ou carregue um ficheiro CSV local para usar na importação. Para procurar o ficheiro:
    1. Clique em Procurar.
    2. Na secção Localização, clique duas vezes no nome do contentor na lista.
    3. Selecione o ficheiro na lista.
    4. Clique em Selecionar.

    Pode importar um ficheiro comprimido (.gz) ou não comprimido (.csv).

  5. Na secção Formato, selecione CSV.
  6. Especifique a base de dados e a tabela na instância do Cloud SQL onde quer importar o ficheiro CSV.
  7. Clique em Importar para iniciar a importação.

gcloud

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Carregue dados do ficheiro CSV para o contentor.
  4. Identifique a conta de serviço da instância do Cloud SQL a partir da qual está a fazer a exportação. Pode fazê-lo executando o comando gcloud sql instances describe com o nome da instância. Procure o campo serviceAccountEmailAddress no resultado.
    gcloud sql instances describe INSTANCE_NAME
  5. Copie o campo serviceAccountEmailAddress.
  6. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectAdmin função do IAM à conta de serviço da instância do Cloud SQL para o contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  7. Importe o ficheiro:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME

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

  8. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as através de gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Faculte à sua instância as funções de IAM legacyBucketWritereobjectViewer para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  4. Importe o ficheiro:

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • table_name: o nome da tabela da base de dados
    • escape_character: o caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • quote_character: o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Para ver a lista completa de parâmetros do pedido, consulte a página instances:import.
  5. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as.

REST v1beta4

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Faculte à sua instância a storage.objectAdmin função do IAM para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  4. Importe o ficheiro:

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • table_name: o nome da tabela da base de dados
    • escape_character: o caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo,"22" representa as aspas duplas. (opcional)
    • quote_character: o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Para ver a lista completa de parâmetros do pedido, consulte a página instances:import.
  5. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as.

Personalize o formato de um ficheiro CSV para o Cloud SQL para MySQL

Pode usar gcloud ou a API REST para personalizar o formato do ficheiro CSV.

Segue-se um exemplo de comando gcloud:

gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--table=TABLE_NAME \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

O corpo do pedido da API REST equivalente teria o seguinte aspeto:

{
 "importContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "database": ["DATABASE_NAME"],
      "csvImportOptions":
       {
           "table": "TABLE_NAME",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

Os exemplos de API e gcloud anteriores são equivalentes à execução da seguinte declaração SQL:

LOAD DATA LOCAL INFILE ... CHARACTER SET 'utf8mb4'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\'.

Se receber um erro, como ERROR_RDBMS, certifique-se de que a tabela existe. Se a tabela existir, confirme que tem as autorizações corretas no contentor. Para obter ajuda na configuração do controlo de acesso no Cloud Storage, consulte o artigo Crie e faça a gestão de listas de controlo de acesso.

Para ver como o pedido da API REST subjacente é construído para esta tarefa, consulte o Explorador de APIs na página instances:import.

O que se segue?