Importa datos a Cloud SQL

En esta página, se describe cómo importar datos a instancias de Cloud SQL. Puedes importar datos de archivos de volcado de SQL o de archivos CSV.

Si deseas conocer las prácticas recomendadas para la importación de datos, consulta Prácticas recomendadas para importar y exportar datos.

Después de completar una operación de importación, verifica los resultados.

Antes de comenzar

Asegúrate de haber configurado las funciones y los permisos requeridos. Para realizar estos procedimientos, debes importar un archivo de Cloud Storage. Para importar datos desde Cloud Storage, la cuenta de servicio o de usuario de la instancia de Cloud SQL debe tener lo siguiente:

  • La función Administrador de Cloud SQL o una función personalizada que incluya el permiso cloudsql.instances.import
  • La función roles/storage.LegacyObjectReader de IAM (que tiene el permiso storage.objects.get)
  • Si la cuenta de servicio o de usuario también realizan operaciones de exportación, otorga el permiso cloudsql.instances.export y la función de IAM roles/storage.legacyBucketWriter.

Si deseas obtener ayuda con las funciones de IAM, consulta Cloud Identity and Access Management para Cloud Storage.

Puedes encontrar el nombre de la cuenta de servicio de la instancia en Google Cloud Console, en la página Descripción general de la instancia. Puedes verificar las funciones de tu bucket de Cloud Storage mediante la herramienta de gsutil:

gsutil iam get gs://[BUCKET_NAME]

Obtén más información para usar IAM con buckets.

Importa datos de un archivo de volcado de SQL a Cloud SQL

  • Crea un archivo de volcado de SQL. Utiliza las instrucciones de la viñeta que se aplica a tu situación. En estas instrucciones, se establecen ciertas marcas que hacen que el archivo de volcado sea compatible con Cloud SQL.

  • La base de datos y la tabla hacia las que importas deben existir en tu instancia de Cloud SQL. Para obtener ayuda sobre cómo crear una base de datos, consulta la sección sobre cómo crear una base de datos. Para crear una tabla, usa la instrucción de SQL CREATE TABLE en el cliente mysql.
  • La operación de importación intenta ejecutar los comandos de SQL en el archivo sqldump, como borrar y volver a crear tablas, índices y entradas. Para obtener ayuda sobre cómo crear una base de datos, consulta la sección sobre cómo crear una base de datos.
  • No uses un usuario del sistema (como root@localhost) como DEFINER para activadores, vistas o procedimientos almacenados. No tendrás acceso a este usuario en Cloud SQL.
  • Si tu archivo de volcado de SQL contiene cláusulas DEFINER (vistas, activadores o procedimientos almacenados), entonces la importación podría fallar según el orden en el que se ejecuten estas declaraciones. Obtén más información sobre el uso de DEFINER y las posibles soluciones alternativas en Cloud SQL.
  • Si deseas obtener ayuda con la creación de un archivo de volcado de SQL que se pueda importar a Cloud SQL, consulta Crea un archivo de volcado de SQL.
  • Para importar datos de un archivo de volcado de SQL a una instancia de Cloud SQL, haz lo siguiente:

    Console

    1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

      Ir a la página Instancias de Cloud SQL

    2. Selecciona la instancia para abrir su página de Descripción general.
    3. En la barra de botones, haz clic en Importar.
    4. En Elige el archivo del cual deseas importar datos, ingresa la ruta de acceso al depósito y el archivo de volcado de SQL que se usará para la importación. O bien, navega al archivo mediante estos pasos:
      1. Haz clic en Explorar.
      2. En Ubicación, haz doble clic en el nombre del depósito en la lista.
      3. Selecciona el archivo de la lista.
      4. Haz clic en Seleccionar.

      Puedes importar un archivo comprimido (.gz) o uno sin comprimir (.sql).

    5. En Formato, selecciona SQL.
    6. Selecciona la base de datos hacia la cual deseas importar los datos.

      Esto hace que Cloud SQL ejecute la instrucción USE DATABASE antes de la importación.

    7. Haz clic en Importar para comenzar la importación.

    gcloud

    1. Si aún no lo hiciste, crea un bucket de Cloud Storage.

      Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.

    2. Sube el archivo a tu depósito.

      Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.

    3. Describe la instancia hacia la cual deseas importar:
      gcloud sql instances describe [INSTANCE_NAME]
      
    4. Copia el campo serviceAccountEmailAddress.
    5. Usa gsutil iam para otorgar la función de IAM storage.objectAdmin a la cuenta de servicio del depósito.
        gsutil iam ch serviceAccount:[SERVICE-ACCOUNT]:objectAdmin \
        gs://[BUCKET-NAME]
        
      Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM.
    6. Importa la base de datos:
      gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME] \
                                  --database=[DATABASE_NAME]
      

      Para obtener información sobre el uso del comando import sql, consulta la página de referencia del comando sql import sql.

      Si el comando muestra un error como “ERROR_RDBMS”, revisa los permisos; por lo general, este error se genera por problemas con los permisos.

    7. Si no necesitas conservar los permisos de IAM que configuraste antes, quítalos mediante gsutil iam.

    API de REST v1beta4

      Crea un archivo de volcado de SQL. Utiliza las instrucciones de la viñeta que se aplica a tu situación. En estas instrucciones, se establecen ciertas marcas que hacen que el archivo de volcado sea compatible con Cloud SQL.

    1. Si aún no lo hiciste, crea un bucket de Cloud Storage.

      Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.

    2. Sube el archivo a tu depósito.

      Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.

    3. Otorga a la instancia la función de IAM storage.objectAdmin para el depósito. Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM.
    4. Importa el archivo de volcado:

      Antes de usar cualquiera de los siguientes datos de la solicitud, realiza estos reemplazos:

      • project-id: El ID del proyecto
      • instance-id: El ID de la instancia
      • bucket_name: El nombre del depósito de Cloud Storage
      • path_to_sql_file: La ruta de acceso al archivo SQL
      • database_name: El nombre de una base de datos dentro de la instancia de Cloud SQL

      Método HTTP y URL:

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

      Cuerpo JSON de la solicitud:

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

      Para enviar tu solicitud, expande una de estas opciones:

      Deberías recibir una respuesta JSON similar a la siguiente:

      Si quieres obtener una lista completa de parámetros para esta solicitud, consulta la página instances:import.
    5. Si no necesitas conservar los permisos de IAM que configuraste, quítalos ahora.
    Para ver cómo se realiza la solicitud subyacente a la API de REST de esta tarea, consulta Explorador de API en la página instances:import

    Importa datos de un archivo CSV a Cloud SQL

    • La base de datos y la tabla hacia las que importas deben existir en tu instancia de Cloud SQL. Para obtener ayuda sobre cómo crear una base de datos, consulta la sección sobre cómo crear una base de datos. Para crear una tabla, usa la instrucción de SQL CREATE TABLE en el cliente mysql.
    • El archivo CSV debe atenerse a los requisitos de formato de archivos CSV que se detallan a continuación.

      Si tu archivo no cumple con estos requisitos, también puedes usar la instrucción LOAD DATA LOCAL INFILE en el cliente mysql, que carga un archivo local en la base de datos. Esto requiere el uso de la opción --local-infile para el cliente mysql.

    • Realiza estas acciones si importas datos que exportaste desde tu servidor MySQL local:
      1. Crea un depósito en Cloud Storage con las instrucciones de la sección sobre cómo crear depósitos de almacenamiento.
      2. Sube el archivo de volcado de SQL al depósito de Cloud Storage mediante el procedimiento que aparece en la sección sobre cómo subir objetos.

    Requisitos de formato de archivo CSV

    Los archivos CSV deben tener una línea por cada fila de datos y tener campos separados por comas. El formato de los archivos CSV que acepta Cloud SQL equivale al uso de las siguientes instrucciones MySQL:
          LOAD DATA INFILE ... CHARACTER SET 'utf8mb4'
          FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'.
    
    Si deseas crear un archivo CSV con este formato, cuando exportas datos desde una base de datos existente, asegúrate de que tu exportación use las mismas opciones o delimitadores que usa Cloud SQL para importar. Consulta cómo crear un archivo CSV para ver un ejemplo.

    Para importar datos a una instancia de Cloud SQL con un archivo CSV, sigue estos pasos:

    Console

    1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

      Ir a la página Instancias de Cloud SQL

    2. Selecciona la instancia para abrir su página de Descripción general.
    3. En la barra de botones, haz clic en Importar.
    4. En Elige el archivo del cual deseas importar datos, ingresa la ruta de acceso al depósito y el archivo CSV que se usará para la importación. O bien, navega al archivo mediante estos pasos:
      1. Haz clic en Explorar.
      2. En Ubicación, haz doble clic en el nombre del depósito en la lista.
      3. Selecciona el archivo de la lista.
      4. Haz clic en Seleccionar.

      Puedes importar un archivo comprimido (.gz) o uno sin comprimir (.csv).

    5. En Formato, selecciona CSV.
    6. Especifica las opciones de Base de datos y Tabla en la instancia de Cloud SQL en la que deseas importar el archivo CSV.
    7. De manera opcional, puedes especificar un usuario para la importación.
    8. Haz clic en Importar para comenzar la importación.

    gcloud

    1. Si aún no lo hiciste, crea un bucket de Cloud Storage.

      Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.

    2. Sube el archivo a tu depósito.

      Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.

    3. Sube datos del archivo CSV al depósito.
    4. Describe la instancia desde la que exportas:
      gcloud sql instances describe [INSTANCE_NAME]
      
    5. Copia el campo serviceAccountEmailAddress.
    6. Usa gsutil iam para otorgar la función de IAM storage.objectAdmin a la cuenta de servicio del depósito. Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM.
    7. Importa el archivo:
      gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                  --database=[DATABASE_NAME] --table=[TABLE_NAME]
      

      Para obtener información sobre el uso del comando import csv, consulta la página de referencia del comando sql import csv.

    8. Si no necesitas conservar los permisos de IAM que configuraste antes, quítalos mediante gsutil iam.

    API de REST v1beta4

    1. Si aún no lo hiciste, crea un bucket de Cloud Storage.

      Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.

    2. Sube el archivo a tu depósito.

      Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.

    3. Otórgale a tu instancia la función de IAM storage.objectAdmin para el depósito. Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM.
    4. Importa el archivo:

      Antes de usar cualquiera de los siguientes datos de la solicitud, realiza estos reemplazos:

      • project-id: El ID del proyecto
      • instance-id: El ID de la instancia
      • bucket_name: El nombre del depósito de Cloud Storage
      • path_to_csv_file: La ruta de acceso al archivo CSV
      • database_name: El nombre de una base de datos dentro de la instancia de Cloud SQL
      • table_name: El nombre de la tabla de la base de datos

      Método HTTP y URL:

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

      Cuerpo JSON de la solicitud:

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

      Para enviar tu solicitud, expande una de estas opciones:

      Deberías recibir una respuesta JSON similar a la siguiente:

      Si quieres obtener una lista completa de parámetros para esta solicitud, consulta la página instances:import.
    5. Si no necesitas conservar los permisos de IAM que configuraste antes, quítalos.

    Si obtienes un error como ERROR_RDBMS, asegúrate de que la tabla exista. Si la tabla existe, confirma que tienes los permisos correctos en el depósito. Si quieres obtener ayuda para configurar el control de acceso en Cloud Storage, consulta Crea y administra listas de control de acceso (LCA).

    Para ver cómo se realiza la solicitud subyacente a la API de REST de esta tarea, consulta Explorador de API en la página instances:import

    Soluciona problemas

    Haz clic en los vínculos de la tabla para obtener más información:

    Situación Posible problema Solución
    La importación está tomando demasiado tiempo. Hay demasiadas conexiones activas que pueden interferir en las operaciones de importación. Cierra las conexiones sin usar o reinicia la instancia de Cloud SQL antes de comenzar una operación de importación.
    La importación falla. El archivo exportado puede contener usuarios de la base de datos que aún no existen. Limpia la base de datos errónea antes de reintentar la importación. Crea los usuarios de la base de datos antes de realizar la importación.
    Se produjo un error durante la importación: la tabla no existe. En este momento, no existe la tabla necesaria. Inhabilita FOREIGN_KEY_CHECKS al comienzo de la importación.
    Mensaje de error: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'. Hay un DEFINER en el archivo de volcado que no existe en la base de datos. Obtén más información sobre el uso de DEFINER y las posibles soluciones en Cloud SQL.
    Mensaje de error: Unknown table 'COLUMN_STATISTICS' in information_schema. Esto sucede si usas el objeto binario mysqldump de MySQL 8.0 para volcar datos de una base de datos de MySQL 5.7 y, luego, importarlos a una base de datos de MySQL 8.0. Si vuelcas los datos de una base de datos de MySQL 5.7 y, luego, los importas a una base de datos de MySQL 8.0, asegúrate de usar el objeto binario mysqldump de MySQL 5.7. Si usas el objeto binario mysqldump de MySQL 8.0, debes agregar la marca --column-statistics=0.

    La importación está tomando demasiado tiempo

    La importación está tardando demasiado y está bloqueando otras operaciones.

    Posible problema

    Hay demasiadas conexiones activas que pueden interferir en las operaciones de importación. Las conexiones consumen CPU y memoria, lo que limita los recursos disponibles.

    Solución

    Cierra las operaciones sin usar. Verifica el uso de la memoria y la CPU para asegurarte de que haya una gran cantidad de recursos disponibles. La mejor manera de garantizar la cantidad máxima de recursos para la operación de importación es reiniciar la instancia antes de comenzar la operación. Cuando se realiza un reinicio, sucede lo siguiente:

    • Se cierran todas las conexiones.
    • Finaliza cualquier tarea que pueda consumir recursos.


    La importación falla

    La importación falla cuando uno o más usuarios a los que se hace referencia en el archivo de volcado de SQL exportado no existen.

    Posible problema

    Antes de importar un archivo de volcado de SQL, deben existir todos los usuarios de la base de datos que poseen objetos o que recibieron permisos sobre los objetos en la base de datos de volcado. Si este no es el caso, el restablecimiento no puede volver a crear los objetos con la relación de propiedad o los permisos originales.

    Solución

    Limpia la base de datos errónea antes de reintentar la importación. Crea los usuarios de la base de datos antes de importar el archivo de volcado de SQL.


    Error durante la importación: la tabla no existe

    Una operación de importación falla y se muestra un error que indica que una tabla no existe.

    Posible problema

    Las tablas pueden tener dependencias de clave externa en otras tablas y, según el orden de las operaciones, es posible que una o más de esas tablas aún no existan durante la operación de importación.

    Solución

    Agrega la siguiente línea al comienzo del archivo de volcado:

      SET FOREIGN_KEY_CHECKS=0;
    

    Además, agrega esta línea al final del archivo de volcado:

      SET FOREIGN_KEY_CHECKS=1;
    

    Por medio de configuración, se desactivan las verificaciones de integridad de los datos mientras la operación de importación está en curso y se las vuelve a activar después de que se cargan los datos. Esto no afecta la integridad de los datos en la base de datos, ya que se validaron durante la creación del archivo de volcado.


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

    Verás el error ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'.

    Posible problema

    La causa raíz es que un usuario en el archivo de volcado con la cláusula DEFINER no existe en la base de datos y el mismo usuario hace referencia cruzada en las definiciones del objeto en la base de datos.

    Solución

    Consulta este documento sobre cómo importar una base de datos con cláusulas DEFINER en el archivo de volcado. Es posible que primero debas crear uno o más usuarios en la base de datos.


    Mensaje de error: Tabla desconocida "COLUMN_STATISTICS" en information_schema

    Ves el mensaje de error Unknown table 'COLUMN_STATISTICS' in information_schema.

    Posible problema

    Esto sucede si usas el objeto binario mysqldump de MySQL 8.0 para volcar datos de una base de datos de MySQL 5.7 y, luego, importarlos a una base de datos de MySQL 8.0.

    Solución

    Si vuelcas los datos de una base de datos de MySQL 5.7 y, luego, los importas a una base de datos de MySQL 8.0, asegúrate de usar el objeto binario mysqldump de MySQL 5.7. Si usas el objeto binario mysqldump de MySQL 8.0, debes agregar la marca --column-statistics=0.

    ¿Qué sigue?