Prácticas recomendadas para la importación y exportación de datos

En esta página, se proporcionan las prácticas recomendadas para importar y exportar datos con Cloud SQL. Si quieres obtener instrucciones, consulta Cómo importar datos a Cloud SQL.

Si quieres exportar datos de Cloud SQL a fin de usarlos en una instancia de MySQL que administras, consulta Exporta e importa con archivos de volcado de SQL o Exporta e importa con archivos CSV.

Recomendaciones para importar y exportar

Las siguientes son prácticas recomendadas que se deben tener en cuenta a la hora de importar y exportar datos:

Usa el mismo modo SQL para importar y exportar

La configuración del modo SQL afecta la forma en la que Cloud SQL interpreta las consultas de SQL. Por ejemplo, si exportas desde una base de datos que no tiene el modo SQL Estricto habilitado y, luego, intentas importar a Cloud SQL (que habilita el modo SQL Estricto de forma predeterminada), la importación puede fallar. La práctica recomendada es usar en la importación el mismo modo SQL que usaste para la exportación.

Revisa el modo SQL en las bases de datos de origen y de destino para comprobar la compatibilidad. Presta especial atención a las marcas que habilitan el modo SQL Estricto. Si el modo SQL Estricto NO está establecido en la base de datos, te recomendamos quitarlo de Cloud SQL. Si lo quitas, debes establecer otra marca.

Para verificar que la instancia de Cloud SQL tenga el modo deseado, ejecuta SELECT @@GLOBAL.sql_mode;.

No uses los buckets de pagos del solicitante de Cloud Storage

No puedes usar un depósito de Cloud Storage que tenga habilitados los pagos del solicitante para importaciones y exportaciones desde Cloud SQL.

Minimiza el impacto del rendimiento de las exportaciones

En una exportación estándar desde Cloud SQL, la exportación se ejecuta mientras la base de datos está en línea. Cuando los datos que se exportan son más pequeños, es probable que el efecto sea mínimo. Sin embargo, cuando hay objetos o bases de datos grandes, como BLOB en la base de datos, existe la posibilidad de que la exportación disminuya el rendimiento de la base de datos. Esto puede afectar el tiempo que lleva realizar consultas y operaciones de base de datos en la base de datos. Después de comenzar una exportación, no es posible detenerla si la base de datos comienza a responder con lentitud.

Para evitar respuestas lentas durante una exportación, puedes hacer lo siguiente:

  1. Toma la exportación de una réplica de lectura. Esta puede ser una buena opción si realizas exportaciones con frecuencia (a diario o con mayor frecuencia), pero la cantidad de datos que se exportan es pequeña. Para realizar una exportación desde una réplica de lectura, usa las funciones de exportación de la consola de Google Cloud, gcloud o la API de REST en tu instancia de réplica de lectura. Consulta Crea réplicas de lectura para obtener más información sobre cómo crear y administrar réplicas de lectura.

  2. Usa la exportación sin servidores. Con la exportación sin servidores, Cloud SQL crea una instancia temporal separada para descargar la operación de exportación. La descarga de la operación de exportación permite que las bases de datos en la instancia principal continúen con la entrega de consultas y realicen operaciones con la tasa de rendimiento habitual. Cuando se completa la exportación de datos, la instancia temporal se borra de forma automática. Esta puede ser una buena opción si realizas una exportación única a una base de datos grande. Usa las funciones de exportación de la consola de Google Cloud, gcloud o la API de REST con la marca offload para realizar una operación de exportación sin servidores.

    Durante una operación de exportación sin servidores, puedes ejecutar otras operaciones, como la edición, la importación y la conmutación por error de instancias. Sin embargo, si seleccionas delete, la operación de exportación se detiene un poco después de borrar la instancia y no exporta ningún dato.

    Consulta la siguiente tabla para obtener información sobre las operaciones que pueden bloquearse mientras se ejecuta una operación de exportación sin servidores:
    Operación actual Operación nueva Bloqueada?
    Cualquier operación Exportación sin servidores
    Exportación sin servidores Cualquier operación, excepto la exportación sin servidores No
    Cualquier operación, excepto la exportación sin servidores Cualquier operación, excepto la exportación sin servidores

    Una exportación sin servidores tiene mayor duración que una estándar, ya que lleva tiempo crear la instancia temporal. Como mínimo, lleva más de cinco minutos, pero para bases de datos más grandes, puede tomar más. Antes de determinar qué tipo de exportación usar, considera el efecto en el tiempo, el rendimiento y el costo.

Usa las marcas correctas cuando crees un archivo de volcado de SQL

Si no usas las marcas correctas cuando exportes datos a un archivo de volcado de SQL, es posible que la importación no se realice de forma correcta. Para obtener más información sobre cómo crear un archivo de volcado de SQL a fin de importar a Cloud SQL, consulta Cómo crear un archivo de volcado SQL.

Comprime los datos para disminuir los costos

Cloud SQL admite la importación y exportación de archivos comprimidos y no comprimidos. Con la compresión se puede ahorrar una cantidad importante de espacio de almacenamiento en Cloud Storage, además de disminuir los costos de almacenamiento, en especial, cuando se exportan instancias grandes.

Cuando exportes un volcado de SQL o un archivo CSV, usa una extensión de archivo .gz para comprimir los datos. Cuando importas un archivo con la extensión .gz, se descomprime de forma automática.

Reduce los procesos de importación y exportación de larga duración

Las importaciones en Cloud SQL y las exportaciones fuera de Cloud SQL pueden tardar mucho tiempo en completarse, según el tamaño de los datos que se procesan. Esto puede tener las siguientes consecuencias:

  • No puedes detener una operación de instancia de larga duración de Cloud SQL.
  • Solo puedes realizar una operación de importación o exportación a la vez para cada instancia, y una importación o exportación de larga duración bloquea otras operaciones, como las copias de seguridad automáticas diarias. Las exportaciones sin servidores te permiten ejecutar otras operaciones, como editar instancias, importar, conmutar por error y desbloquear copias de seguridad automáticas diarias.

Puedes disminuir la cantidad de tiempo que lleva completar cada operación mediante la función de importación o exportación de Cloud SQL con lotes de datos más pequeños.

En el caso de las exportaciones, puedes realizar la exportación desde una réplica de lectura o usar la exportación sin servidores para minimizar el impacto en el rendimiento de la base de datos y permitir que se ejecuten otras operaciones en tu instancia mientras se ejecuta una exportación.

Para obtener más sugerencias, consulta Diagnostica problemas relacionados con las instancias de Cloud SQL.

Usa InnoDB

InnoDB es el único motor de almacenamiento compatible con las instancias de MySQL.

Puedes convertir tus tablas de MyISAM en InnoDB si canalizas la salida de mysqldump a través de una secuencia de comandos sed de la siguiente manera:

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

Trabajos de importación y migración de MySQL que contienen metadatos con la cláusula DEFINER

Debido a que un trabajo de importación o migración de MySQL no migra datos del usuario, las fuentes y los archivos de volcado que contienen metadatos definidos por los usuarios con la cláusula DEFINER no se importarán o migrarán, ya que los usuarios aún existen ahí.

Para identificar qué valores de DEFINER existen en tus metadatos, usa las siguientes consultas (o busca en tu archivo de volcado) y comprueba si hay entradas de root%localhost o de usuarios que no existen en la instancia 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 ejecutar un trabajo de importación o migración desde una fuente que incluye esos metadatos, puedes realizar una de las siguientes acciones:

  • Crea los usuarios en tu instancia de Cloud SQL de destino antes de iniciar tu trabajo de importación o migración.
  • Actualiza la cláusula DEFINER a INVOKER en tu instancia de MySQL de origen o en el archivo de volcado antes de iniciar el trabajo de importación o migración.

Verifica la base de datos importada

Después de completar una operación de importación, conéctate a la base de datos y ejecuta los comandos correspondientes para asegurarte de que los contenidos sean correctos. Por ejemplo, conéctate y enumera las bases de datos, tablas y entradas específicas.

Limitaciones conocidas

A fin de obtener una lista de las limitaciones conocidas, consulta Problemas para importar y exportar datos.

Automatiza las operaciones de exportación

Aunque Cloud SQL no proporciona una forma integrada de automatizar las exportaciones de bases de datos, puedes compilar tu propia herramienta de automatización con varios componentes de Google Cloud. Para obtener más información, consulta este instructivo.

Soluciona problemas

Soluciona problemas de operaciones de importación

Problema Soluciona problemas
HTTP Error 409: Operation failed because another operation was already in progress Ya existe una operación pendiente para la instancia. Solo se permite una operación a la vez. Prueba tu solicitud después de que se complete la operación actual.
La operación de importación está tomando demasiado tiempo. Hay demasiadas conexiones activas que pueden interferir en las operaciones de importación.

Cierra las operaciones sin usar. Verifica el uso de CPU y memoria de la instancia de Cloud SQL para asegurarte de que haya muchos recursos disponibles. La mejor manera de garantizar la cantidad máxima de recursos para la 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.
Una operación de importación puede fallar cuando uno o más usuarios a los que se hace referencia en el archivo de volcado no existen. Antes de importar un archivo de volcado, 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 deben existir en la base de datos de destino. Si este no es el caso, la operación de importación no puede volver a crear los objetos con la propiedad o los permisos originales.

Crea los usuarios de la base de datos antes de realizar la importación.

Una operación de importación falla y se muestra un error que indica que una tabla no existe. 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.

Soluciona problemas de operaciones de exportación

Problema Soluciona problemas
HTTP Error 409: Operation failed because another operation was already in progress. Ya existe una operación pendiente para la instancia. Solo se permite una operación a la vez. Prueba tu solicitud después de que se complete la operación actual.
HTTP Error 403: The service account does not have the required permissions for the bucket. Asegúrate de que el bucket exista y que la cuenta de servicio de la instancia de Cloud SQL (que realiza la exportación) tenga el rol Storage Object Creator (roles/storage.objectCreator) para permitir la exportación al bucket. Consulta Roles de IAM para Cloud Storage.
La exportación de archivos CSV se completó, pero la exportación de SQL falló. Los formatos CSV y SQL se exportan de manera diferente. El formato SQL exporta la base de datos completa, y es probable que esta operación tome más tiempo para completarse. El formato CSV te permite definir qué elementos de la base de datos incluir en la exportación.

Usa las exportaciones de archivos CSV para exportar solo lo que necesites.

La exportación está tomando demasiado tiempo. Cloud SQL no admite operaciones síncronas simultáneas.

Usa la descarga de exportación. En un nivel alto, en la descarga de exportación, en lugar de emitir una exportación en la instancia de origen, Cloud SQL inicia una instancia de descarga para realizar la exportación. La descarga de la exportación tiene varias ventajas, como el aumento del rendimiento en la instancia de origen y el bloqueo de las operaciones administrativas mientras se ejecuta la exportación. Con la descarga de la exportación, la latencia total puede aumentar en función del tiempo que lleva activar la instancia de descarga. Por lo general, para exportaciones con un tamaño razonable, la latencia no es significativa. Sin embargo, si la exportación es lo suficientemente pequeña, es posible que notes un aumento en la latencia.

Deseas que las exportaciones sean automáticas. Cloud SQL no proporciona una forma de automatizar las exportaciones.

Podrías compilar tu propio sistema de exportación automatizado mediante el uso de productos de Google Cloud, como Cloud Scheduler, Pub/Sub y Cloud Functions, similar a este artículo sobre cómo automatizar las copias de seguridad.

¿Qué sigue?