Prácticas recomendadas para importar y exportar datos

En esta página se describen las prácticas recomendadas para importar y exportar datos con Cloud SQL. Para obtener instrucciones detalladas sobre cómo importar datos en Cloud SQL, consulta el artículo Importar datos.

Para exportar datos de Cloud SQL y usarlos en una instancia de MySQL que gestionas, consulta Exportar e importar con archivos de volcado de SQL o Exportar e importar con archivos CSV.

Prácticas recomendadas para importar y exportar

A continuación se indican algunas prácticas recomendadas que se deben tener en cuenta a la hora de importar y exportar datos:

Usar el mismo modo SQL para importar y exportar

La configuración del modo SQL afecta a la forma en que Cloud SQL interpreta las consultas SQL. Por ejemplo, si exportas datos de una base de datos sin la opción Strict SQL habilitada y, a continuación, intentas importarlos en Cloud SQL (que tiene habilitada la opción Strict SQL de forma predeterminada), es posible que la importación falle. Lo más recomendable es usar el mismo modo SQL en la importación que en 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 la opción SQL estricto NO está configurada en tu base de datos, probablemente quieras quitarla en Cloud SQL. Si quitas Strict SQL, debes definir otra marca.

Para verificar que tu instancia de Cloud SQL tiene el modo que quieres, ejecuta SELECT @@GLOBAL.sql_mode;.

No uses segmentos de Cloud Storage con la opción Peticionario paga

No puedes usar un segmento de Cloud Storage que tenga habilitada la opción Pago por el solicitante para importar y exportar datos de Cloud SQL.

Minimizar el impacto de las exportaciones en el rendimiento

En una exportación estándar de Cloud SQL, la exportación se realiza mientras la base de datos está online. Si los datos que se exportan son de menor tamaño, es probable que el impacto sea mínimo. Sin embargo, cuando hay bases de datos o objetos de gran tamaño, como BLOBs en la base de datos, es posible que la exportación degrade el rendimiento de la base de datos. Esto puede afectar al tiempo que se tarda en realizar consultas y operaciones en la base de datos. Una vez que inicies una exportación, no podrás detenerla si tu base de datos empieza a responder lentamente.

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

  1. Realiza la exportación desde una réplica de lectura. Esta puede ser una buena opción si realiza exportaciones con frecuencia (a diario o más a menudo), 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 Google Cloud consolagcloud o de la API REST en tu instancia de réplica de lectura. Consulta Crear réplicas de lectura para obtener más información sobre cómo crear y gestionar réplicas de lectura.

  2. Usa la exportación sin servidor. Con la exportación sin servidor, Cloud SQL crea una instancia temporal independiente para descargar la operación de exportación. Al descargar la operación de exportación, las bases de datos de la instancia principal pueden seguir respondiendo a las consultas y realizando operaciones al ritmo habitual. Cuando se complete la exportación de datos, la instancia temporal se eliminará automáticamente. Puede ser una buena opción si vas a exportar una base de datos grande una sola vez. Usa la Google Cloud consolagcloud o las funciones de exportación de la API REST con la marca offload para realizar una operación de exportación sin servidor.

    Durante una operación de exportación sin servidor, puedes ejecutar otras operaciones, como editar la instancia, importar y conmutar por error. Sin embargo, si seleccionas delete, la operación de exportación se detiene un tiempo después de eliminar la instancia y no exporta ningún dato.

    Consulta la siguiente tabla para obtener información sobre las operaciones que se pueden bloquear mientras se ejecuta una operación de exportación sin servidor:
    Operación actual Nueva operación ¿Bloqueado?
    Cualquier operación Exportación sin servidor
    Exportación sin servidor Cualquier operación, excepto la exportación sin servidor No
    Cualquier operación, excepto la exportación sin servidor Cualquier operación, excepto la exportación sin servidor

    Una exportación sin servidor tarda más que una exportación estándar, ya que se necesita tiempo para crear la instancia temporal. Como mínimo, tarda más de cinco minutos, pero en el caso de bases de datos más grandes, puede tardar más. Ten en cuenta el impacto en el tiempo, el rendimiento y el coste antes de determinar qué tipo de exportación vas a usar.

Usar las marcas correctas al crear un archivo de volcado de SQL

Si no usas las marcas correctas al exportar tus datos a un archivo de volcado de SQL, es posible que la importación no se realice correctamente. Para obtener información sobre cómo crear un archivo de volcado de SQL para importarlo a Cloud SQL, consulta el artículo Crear un archivo de volcado de SQL.

Comprimir datos para reducir costes

Cloud SQL admite la importación y exportación de archivos comprimidos y sin comprimir. La compresión puede ahorrar una cantidad significativa de espacio de almacenamiento en Cloud Storage y reducir los costes de almacenamiento, sobre todo cuando exportas instancias grandes.

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

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

Las importaciones en Cloud SQL y las exportaciones desde Cloud SQL pueden tardar mucho tiempo en completarse, dependiendo del tamaño de los datos que se estén procesando. Esto puede tener los siguientes efectos:

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

Puedes reducir el tiempo necesario para completar cada operación usando 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 realizarlas desde una réplica de lectura o usar la exportación sin servidor para minimizar el impacto en el rendimiento de la base de datos y permitir que se ejecuten otras operaciones en tu instancia mientras se lleva a cabo una exportación.

Para obtener más consejos, consulta Diagnosticar problemas con instancias de Cloud SQL.

Usar InnoDB

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

Puedes convertir tus tablas de MyISAM a InnoDB canalizando 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

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

Como los trabajos de importación o migración de MySQL no migran datos de usuario, no se podrán importar ni migrar las fuentes ni los archivos de volcado que contengan metadatos definidos por usuarios con la cláusula DEFINER, ya que los usuarios aún no existen.

Para identificar qué valores de DEFINER hay 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 una tarea de importación o migración desde una fuente que incluya estos metadatos, puedes hacer lo siguiente:

  • Crea los usuarios en la instancia de Cloud SQL de destino antes de iniciar la importación o la 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.

Verificar la base de datos importada

Una vez que se haya completado la operación de importación, conéctate a tu base de datos y ejecuta los comandos de base de datos adecuados para asegurarte de que el contenido sea correcto. Por ejemplo, conecta y muestra las bases de datos, las tablas y las entradas específicas.

Limitaciones conocidas

Para ver una lista de las limitaciones conocidas, consulta el artículo Problemas al importar y exportar datos.

Automatizar las operaciones de exportación

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

Solución de problemas

Solucionar problemas con operaciones de importación

Problema Solución de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Ya hay una operación pendiente en tu instancia. Solo se puede realizar una operación a la vez. Prueba a enviar la solicitud después de que se complete la operación en curso.
La operación de importación está tardando demasiado. Demasiadas conexiones activas pueden interferir en las operaciones de importación.

Cierra las operaciones que no se utilicen. Comprueba el uso de CPU y memoria de tu instancia de Cloud SQL para asegurarte de que hay suficientes recursos disponibles. La mejor forma de asegurarte de que dispones del número máximo de recursos para llevar a cabo la importación es reiniciar la instancia antes de comenzar la operación.

Reiniciar:

  • Cierra todas las conexiones.
  • Finaliza las tareas que puedan estar consumiendo recursos.
Una operación de importación puede fallar cuando no existen uno o varios de los usuarios a los que se hace referencia en el archivo de volcado. Antes de importar un archivo de volcado, todos los usuarios de bases de datos que sean propietarios de objetos o a los que se les hayan concedido permisos sobre objetos de la base de datos de volcado deben existir en la base de datos de destino. Si no lo hacen, la operación de importación no podrá volver a crear los objetos con la propiedad o los permisos originales.

Crea los usuarios de la base de datos antes de importar.

Una operación de importación falla y se muestra un error que indica que no existe una tabla. Las tablas pueden tener dependencias de claves externas en otras tablas y, según el orden de las operaciones, es posible que una o varias de estas tablas aún no existan en el momento de la operación de importación.

Puedes probar a realizar lo siguiente:

Añade la siguiente línea al principio del archivo de volcado:

SET FOREIGN_KEY_CHECKS=0;
  

Además, añade esta línea al final del archivo de volcado:

SET FOREIGN_KEY_CHECKS=1;
  

Estos ajustes desactivan las comprobaciones de integridad de los datos mientras se lleva a cabo la operación de importación y las vuelven a activar una vez que se han cargado los datos. Esto no afecta a la integridad de los datos de la base de datos, ya que los datos ya se validaron durante la creación del archivo de volcado.

Solucionar problemas de operaciones de exportación

Problema Solución de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Ya hay una operación pendiente en tu instancia. Solo se puede realizar una operación a la vez. Prueba a enviar la solicitud después de que se complete la operación en curso.
HTTP Error 403: The service account does not have the required permissions for the bucket. Asegúrate de que el segmento exista y de 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 segmento. Consulta los roles de gestión de identidades y accesos para Cloud Storage.
La exportación a CSV ha funcionado, pero la exportación a SQL ha fallado. Los formatos CSV y SQL se exportan de forma diferente. El formato SQL exporta toda la base de datos y es probable que tarde más en completarse. El formato CSV te permite definir qué elementos de la base de datos quieres incluir en la exportación.

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

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

Usa la transferencia de exportación. A grandes rasgos, en la descarga de exportaciones, en lugar de emitir una exportación en la instancia de origen, Cloud SQL crea una instancia de descarga para realizar la exportación. La descarga de exportaciones tiene varias ventajas, como un mayor rendimiento en la instancia de origen y la posibilidad de realizar operaciones administrativas mientras se ejecuta la exportación. Con la transferencia de la exportación, la latencia total puede aumentar en el tiempo que se tarda en activar la instancia de transferencia. Por lo general, en el caso de las exportaciones de tamaño razonable, la latencia no es significativa. Sin embargo, si la exportación es lo suficientemente pequeña, es posible que notes el aumento de la latencia.

Quieres que las exportaciones se automaticen. Cloud SQL no ofrece ninguna forma de automatizar las exportaciones.

Puedes crear tu propio sistema de exportación automatizado con productos como Cloud Scheduler, Pub/Sub y funciones de Cloud Run, de forma similar a lo que se explica en este artículo sobre la automatización de copias de seguridad. Google Cloud

Siguientes pasos