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 datos.
Prácticas recomendadas 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 de SQL para importar y exportar.
- No uses los buckets de pagos del solicitante de Cloud Storage.
- Usa las marcas correctas cuando crees un archivo de volcado de SQL.
- Comprime los datos para reducir los costos.
- Reduce los procesos de importación y exportación de larga duración.
- Usa InnoDB.
- Trabajos de importación y migración de MySQL que contienen metadatos con la cláusula DEFINER.
- Verifica la base de datos importada.
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 depósitos de pagos del solicitante de Cloud Storage
No puedes usar un bucket de Cloud Storage que tenga habilitados los pagos del solicitante para importaciones y exportaciones desde Cloud SQL.
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 procesos de importación y exportación de larga duración
Las importaciones y exportaciones en Cloud SQL mediante la función de importación (a través de un depósito de Cloud Storage) pueden llevar mucho tiempo en completarse, según el tamaño de la base de datos. Esto puede tener las siguientes consecuencias:
- 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 para cada instancia.
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.
Para las exportaciones, puedes usar la exportación sin servidores a fin de minimizar el impacto en el rendimiento de la base de datos y permitir que otras operaciones se ejecuten en la 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
aINVOKER
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.
Soluciona problemas
Haz clic en los vínculos de la tabla para obtener más información:
Situación | Posible problema | Solución |
---|---|---|
No se puede ver el estado de la operación. | La interfaz de usuario solo muestra los estados que indican una finalización correcta o un error. | Usa estos comandos de la base de datos para obtener más información. |
408 Error (Timeout) durante la exportación. |
La exportación de SQL puede llevar mucho tiempo según el tamaño de la base de datos y el contenido de que se exporta. | Usa varias exportaciones de archivos CSV para reducir el tamaño de cada operación. |
La exportación de archivos CSV se completó, pero la exportación de SQL falló. | Es más probable que la exportación de SQL tenga problemas de compatibilidad con Cloud SQL. | 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. Más informació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. |
Error 1412: Table definition has changed . |
La tabla cambió durante la exportación. | Quita cualquier declaración de cambio de tabla de la operación de volcado. |
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 interrumpió la conexión durante la operación de exportación. | La consulta debe generar datos dentro de los primeros siete minutos. | Prueba la consulta de forma manual. Más información. |
Se produjo un error desconocido durante la exportación. | Es posible que haya un problema con el ancho de banda. | Asegúrate de que la instancia y el depósito de Cloud Storage estén en la misma región. |
Deseas automatizar las exportaciones. | Cloud SQL no proporciona una forma de automatizar las exportaciones. | Compila tu propia canalización para llevar a cabo esta función. Más información. |
ERROR_RDBMS: system error occurred . |
Permisos de Cloud Storage o tabla inexistente. | Verifica los permisos o asegúrate de que la tabla exista. |
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: Access denied; you need (at least one of) the SUPER
privilege(s) for this operation . |
Podría haber un evento, una vista, una función o un procedimiento en el archivo de volcado mediante superuser@localhost (como root@localhost). Esto no es compatible con Cloud SQL. | Obtén más información sobre el uso de DEFINER en las posibles soluciones en Cloud SQL. |
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 . |
No se puede ver el estado de la operación
No puedes ver el estado de una operación en curso.
Posible problema
Google Cloud Console solo informa si la operación se completó de forma correcta o si falló una vez que esta finaliza. Esta herramienta no está diseñada para mostrar advertencias.
Solución
Conéctate a la base de datos y ejecuta SHOW WARNINGS
.
Error 408 (Tiempo de espera agotado) durante la exportación
Verás el mensaje de error 408 Error (Timeout)
mientras realizas un trabajo de exportación en Cloud SQL.
Posible problema
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.
Solución
Usa el formato CSV y ejecuta varios trabajos de exportación más pequeños a fin de reducir el tamaño y la duración de cada operación.
La exportación de archivos CSV se completó, pero la exportación de SQL falló
La exportación de archivos CSV se completó, pero la exportación de SQL falló.
Posible problema
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.
Solución
Usa las exportaciones de archivos CSV para exportar solo lo que necesites.
La exportación está tomando demasiado tiempo
La exportación está tardando demasiado y está bloqueando otras operaciones.
Posible problema
Cloud SQL no admite operaciones síncronas simultáneas.
Solución
Intenta exportar conjuntos de datos más pequeños por vez.
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.
mysqldump: Error 1412: Table definition has changed
Verás el mensaje de error mysqldump: Error 1412: Table definition has
changed, retry transaction when dumping the table
.
Posible problema
Durante el proceso de exportación, hubo un cambio en la tabla.
Solución
La transacción de volcado puede fallar si usas las siguientes declaraciones durante la operación de exportación:
ALTER TABLE
CREATE TABLE
DROP TABLE
RENAME TABLE
TRUNCATE TABLE
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.
Se interrumpió la conexión durante la operación de exportación
Se interrumpió la conexión durante la operación de exportación.
Posible problema
Es posible que el tiempo de espera de la conexión a Cloud Storage se esté agotando porque la consulta que se ejecutó en la exportación no produjo ningún dato en los primeros siete minutos desde que se inició la exportación.
Solución
Para probar la consulta de forma manual, conéctate desde cualquier cliente y envía el resultado de tu consulta a STDOUT con el siguiente comando:
COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )
.
Este es el comportamiento previsto, ya que, cuando se inicia la exportación, se espera que el cliente comience a enviar datos de inmediato. Si se mantiene la conexión sin datos enviados, esta termina interrumpiéndose y, finalmente, la exportación falla, lo que deja a la operación en un estado incierto. Esto es lo que el siguiente mensaje de error de gcloud intenta comunicar:
operation is taking longer than expected
.
Error desconocido durante la exportación
Verás el mensaje de error Unknown error
mientras intentas exportar una base de datos a un depósito de Cloud Storage.
Posible problema
Es posible que la transferencia esté fallando debido a un problema de ancho de banda.
Solución
Es posible que la instancia de Cloud SQL esté ubicada en una región diferente a la del depósito de Cloud Storage. Leer y escribir datos de un continente a otro implica mucho uso de la red y puede causar problemas intermitentes como este. Verifica las regiones de la instancia y el depósito.
Deseas automatizar las exportaciones
Deseas automatizar las exportaciones.
Posible problema
Cloud SQL no proporciona una forma de automatizar las exportaciones.
Solución
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.
Se produjo el error del sistema ERROR_RDBMS
Verás el mensaje de error [ERROR_RDBMS] system error occurred
.
Posible problema
- Es posible que el usuario no tenga todos los permisos de Cloud Storage que necesita.
- Es posible que la tabla de la base de datos no exista.
Solución
- Verifica que tengas al menos los permisos
WRITER
en el depósito y los permisosREADER
en el archivo de exportación. Para obtener más información sobre cómo configurar el control de acceso en Cloud Storage, consulta Crea y administra Listas de control de acceso. - Asegúrate de que la tabla exista. Si la tabla existe, confirma que tienes los permisos adecuados en el depósito.
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.
Se denegó el acceso porque necesitas privilegios SUPER para esta operación (al menos uno)
Verás el error Access denied; you need (at least one of) the SUPER privilege(s) for this operation
.
Posible problema
Podría haber un evento, una vista, una función o un procedimiento en el archivo de volcado mediante superuser@localhost (como root@localhost). Esto no es compatible con Cloud SQL.
Solución
Consulta este documento sobre cómo importar una base de datos con cláusulas DEFINER
.
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
.
Próximos pasos
- Más información sobre cómo importar datos en Cloud SQL
- Más información sobre cómo exportar datos con Cloud SQL
- Más información sobre cómo habilitar las copias de seguridad automáticas
- Más información sobre cómo restablecer desde una copia de seguridad