Guía de Importación MySQL: Importa Dumps SQL y CSV rápidamente (LOAD DATA, Workbench, phpMyAdmin)

目次

1. Lo que podrás hacer en este artículo

Muchas personas que buscan “importación de datos MySQL” se encuentran en una situación en la que quieren:

  • “restaurar un archivo .sql”
  • “importar un CSV”
  • “se detiene con un error”
  • “no funciona en Workbench o phpMyAdmin”

En otras palabras, deseas una solución que puedas aplicar ahora mismo.

Primero, aquí están los “caminos de éxito” más cortos según el objetivo.

🔹 Comando más rápido para importar un archivo SQL (.sql)

Para restauraciones de copias de seguridad o migraciones de servidores, este es el método más rápido.

mysql -u username -p database_name < backup.sql

Cosas a verificar antes

  • ¿Existe la base de datos de destino?
  • ¿Tiene el usuario de conexión privilegios para la base de datos objetivo?
  • La codificación del archivo SQL (usualmente UTF-8)

Si la base de datos aún no ha sido creada:

CREATE DATABASE example_db;

🔹 Forma más rápida de importar un archivo CSV (recomendado)

Para importar grandes volúmenes de datos rápidamente, LOAD DATA es ideal.

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');

Puntos clave

  • Saltos de línea de Windows → '\r\n'
  • Si hay una fila de encabezado → IGNORE 1 LINES
  • Convertir cadenas vacías a NULL → NULLIF()
  • Muchos entornos requieren LOCAL (explicado más adelante)

🔹 Si deseas importar mediante GUI

MySQL Workbench

  • Servidor → Importar datos → seleccionar un archivo → ejecutar

phpMyAdmin

  • Seleccionar la base de datos objetivo → Importar → elegir un archivo → ejecutar

⚠ Sin embargo, para archivos grandes y un manejo de errores confiable, la CLI (línea de comandos) es más fiable.

🔹 3 elementos que debes verificar antes de importar

1. Conjunto de caracteres (más importante)

SHOW VARIABLES LIKE 'character_set%';

Recomendado: utf8mb4

2. Configuraciones que provocan errores relacionados con INFILE

SHOW VARIABLES LIKE 'local_infile';
SHOW VARIABLES LIKE 'secure_file_priv';

3. Verificación de privilegios

SHOW GRANTS FOR 'user'@'localhost';

✔ Qué sigue en este artículo

  • Métodos detallados para importar archivos SQL
  • Técnicas prácticas de importación CSV
  • Un desglose completo de por qué falla INFILE
  • Correcciones más rápidas según el tipo de error
  • Técnicas del mundo real para conjuntos de datos grandes

MySQL data import workflow diagram showing SQL file, CSV file, LOAD DATA LOCAL INFILE, mysql command, and MySQL server process

2. Tipos de importaciones MySQL y cuándo usar cada una

Existen múltiples formas de importar a MySQL, pero la mejor opción depende de tu caso de uso.
Si lo comprendes correctamente, puedes evitar problemas innecesarios.

2.1 Cuándo importar un volcado SQL (.sql)

Casos de uso comunes

  • Restaurar a partir de una copia de seguridad
  • Migración de servidor
  • Aplicar datos similares a producción en un entorno de desarrollo
  • Reimportar datos exportados con mysqldump

Características

  • Restaura toda la estructura de tablas + datos
  • Alta reproducibilidad
  • Puede incluir transacciones
  • Generalmente la opción más segura

Métodos típicos

mysql -u user -p dbname < dump.sql

O dentro de MySQL:

SOURCE /path/to/dump.sql;

Ideal para

  • Restauración completa de una base de datos existente
  • Reconstrucción de un entorno de producción
  • Carga de datos para entornos CI/CD

2.2 Cuándo importar CSV / TSV

Casos de uso comunes

  • Recepción de datos de sistemas externos
  • Importación de datos de Excel
  • Procesamiento ETL
  • Actualización solo de tablas específicas

Características

  • Solo carga datos (el esquema debe existir por separado)
  • Rápido ( LOAD DATA es extremadamente rápido)
  • Permite lógica de transformación durante la importación

Método típico

LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Ideal para

  • Trabajos por lotes programados
  • Integración de datos
  • Ingesta de alta velocidad de grandes cantidades de filas

2.3 Cuándo usar herramientas GUI

Herramientas comunes:

  • MySQL Workbench
  • phpMyAdmin

Características

  • Operación intuitiva
  • Amigable para principiantes
  • Adecuado para conjuntos de datos pequeños

Precauciones

  • Límites de carga (phpMyAdmin)
  • Tiempo de espera agotado
  • Inestable con datos grandes
  • Más difícil analizar errores

2.4 Comparación por método (punto de vista práctico)

MethodSpeedStabilityLarge-file supportError analysisRecommendation
mysql command★★★★★
LOAD DATA★★★★★
Workbench★★★
phpMyAdmin×★★

✔ Elecciones recomendadas en el trabajo real

  • Restauración de respaldo → comando mysql
  • Importación de CSV de alta velocidad → LOAD DATA LOCAL INFILE
  • Tareas pequeñas, de una sola vez → GUI

Si no estás seguro, elegir la CLI (línea de comandos) es la opción más estable.

3. Importación de un archivo SQL (La ruta más rápida al éxito)

Importar un archivo .sql es el método más común para restauraciones de respaldo y migraciones de servidor.
Aquí, el objetivo es “tener éxito lo más rápido posible”, por lo que nos centraremos solo en los pasos prácticos utilizados en el trabajo real.

3.1 Restauración en una línea (el método más común)

Este es el método más confiable y rápido.

mysql -u username -p database_name < backup.sql

Después de ejecutarlo, se te pedirá la contraseña.

✔ Preverificaciones (para prevenir fallos)

① ¿Existe la base de datos?
SHOW DATABASES;

Si no existe:

CREATE DATABASE example_db;
② ¿El usuario tiene privilegios?
SHOW GRANTS FOR 'user'@'localhost';

Si faltan privilegios:

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
③ Codificación del archivo

Generalmente es UTF-8.
Si ves caracteres garabateados, especifícalo explícitamente.

mysql --default-character-set=utf8mb4 -u user -p dbname < backup.sql

3.2 Ejecutar desde dentro de MySQL (comando SOURCE)

Este método se ejecuta después de iniciar sesión en MySQL.

mysql -u user -p
USE example_db;
SOURCE /path/to/backup.sql;

Cuándo es útil

  • Cuando quieres ejecutar solo una parte de un archivo SQL
  • Cuando quieres identificar la ubicación exacta del error
  • Cuando quieres confirmar visualmente el registro de ejecución

3.3 Fallos comunes y soluciones

❌ ERROR 1049: Unknown database

→ La BD no existe
→ Ejecuta CREATE DATABASE

❌ ERROR 1045: Access denied

→ Privilegios insuficientes
→ Verifica con SHOW GRANTS

❌ Se detiene a mitad de camino / ubicación del error no clara

Solución:

  1. Verifica el principio y el final del archivo
    head backup.sql
    tail backup.sql
    
  1. Verifica las líneas justo antes del error
  2. Si el archivo es grande, divídelo y ejecútalo en partes
    split -l 10000 backup.sql part_
    

3.4 Consejos para estabilizar importaciones SQL grandes

① Verifica la configuración de transacciones

Verifica si se incluye SET autocommit=0;

② Si las restricciones de clave foránea son el problema

SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;

③ Verifica el modo SQL

SELECT @@sql_mode;

El modo estricto puede estar afectando la importación.

✔ Recomendaciones prácticas

  • Restauración de producción → comando mysql
  • Depuración → SOURCE
  • Archivos grandes → CLI + considera dividir

4. Importación de CSV (Lo más importante: Más rápido con LOAD DATA)

Al importar datos CSV, el método más rápido y práctico es LOAD DATA.
Para conjuntos de datos grandes, es abrumadoramente más rápido que las sentencias INSERT.

Aquí, proporcionaremos el formato correcto de “copiar y pegar para ejecutar” y destacaremos los puntos de fallo comunes.

4.1 Primero: Prerrequisitos de CSV

Antes de importar, asegúrate de verificar lo siguiente.

✔ Delimitador

  • Coma ,
  • Tabulación \t
  • Punto y coma ; (común en datos extranjeros)

✔ Carácter de comillas

  • Si los valores están encerrados como "value" con comillas dobles

✔ Finales de línea

  • Linux / Mac → \n
  • Windows → \r\n

✔ Conjunto de caracteres / codificación

  • Recomendado: utf8mb4
  • CSV creado en Windows puede ser Shift-JIS
  • UTF-8 con BOM a veces puede causar errores

Verificación de ejemplo:

file -i example.csv

4.2 Forma básica lista para copiar y pegar (CSV con encabezado)

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');

Significado de cada opción

  • LOCAL Lee un archivo del lado del cliente (requerido en muchos entornos)
  • IGNORE 1 LINES Omite la fila de encabezado
  • @age Variable temporal usada para transformar el valor antes de almacenarlo
  • NULLIF() Convierte cadenas vacías a NULL

4.3 Importar solo las columnas que necesitas

Si el CSV tiene columnas innecesarias:

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);

Mapea las columnas no deseadas a @dummy.

4.4 Convertir fechas y tipos durante la importación

Ejemplo: convertir MM/DD/YYYY → formato MySQL

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@date_col, name)
SET date_col = STR_TO_DATE(@date_col, '%m/%d/%Y');

4.5 Para archivos delimitados por tabulaciones (TSV)

FIELDS TERMINATED BY '\t'

4.6 Mejorar el rendimiento aún más (para datos grandes)

Desactivar temporalmente los índices

ALTER TABLE example_table DISABLE KEYS;
-- Run LOAD DATA
ALTER TABLE example_table ENABLE KEYS;

Desactivar temporalmente las claves foráneas

SET FOREIGN_KEY_CHECKS=0;
-- Run LOAD DATA
SET FOREIGN_KEY_CHECKS=1;

Por qué a menudo se requiere LOCAL

  • LOAD DATA INFILE → lee un archivo del lado del servidor
  • LOAD DATA LOCAL INFILE → lee un archivo del lado del cliente

En muchos entornos, usar LOCAL tiene una mayor tasa de éxito.

✔ Forma práctica recomendada

En la mayoría de los casos:

LOAD DATA LOCAL INFILE
+ explicit delimiter
+ explicit line endings
+ IGNORE 1 LINES
+ type conversion

Este es el enfoque más estable.

5. Las 4 principales razones por las que INFILE falla (Sección más importante)

La mayoría de los fallos de LOAD DATA INFILE son causados por configuraciones, privilegios o una mala interpretación de la ubicación de origen.
Si entiendes esto, puedes resolver la mayoría de los errores de inmediato.

5.1 Diferencia entre INFILE y LOCAL INFILE

Este es el concepto básico clave.

CommandWhere it reads fromTypical use
LOAD DATA INFILEFile on the serverA fixed path on the server
LOAD DATA LOCAL INFILEFile on the clientA CSV on your local PC

Malentendidos comunes

  • Intentar leer un archivo local del PC con INFILE y fallar
  • El archivo no existe en el servidor

✔ Regla práctica rápida

  • CSV en tu propio PC → LOCAL
  • CSV colocado en el servidor → INFILE

Si no estás seguro, usar LOCAL es la opción más segura.

5.2 local_infile está deshabilitado (causa del ERROR 1148)

Ejemplo de error:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

Causa:

local_infile está OFF

✔ Verificar la configuración actual

SHOW VARIABLES LIKE 'local_infile';

✔ Habilitarlo al conectar (lado del cliente)

mysql --local-infile=1 -u user -p

✔ Habilitar permanentemente (archivo de configuración)

Agregar a my.cnf o my.ini:

[mysqld]
local_infile=1

Debes reiniciar el servidor.

5.3 Restricción secure_file_priv

Esto ocurre al usar LOAD DATA INFILE (sin LOCAL).

Verificar:

SHOW VARIABLES LIKE 'secure_file_priv';

Salida de ejemplo

/var/lib/mysql-files/

→ Solo puedes leer archivos dentro de este directorio.

✔ Solución

  • Mueve el CSV al directorio permitido
  • O usa LOCAL

5.4 Privilegios insuficientes (privilegio FILE / permisos del SO)

Ejemplo de error:

ERROR 1045: Access denied

Verificar:

SHOW GRANTS FOR 'user'@'localhost';

✔ Privilegio requerido

GRANT FILE ON *.* TO 'user'@'localhost';

※ Por seguridad, opera con los mínimos privilegios posibles.

5.5 Especificación de ruta incorrecta

  • Usa una ruta absoluta, no una ruta relativa
  • En Windows, se recomienda C:/path/file.csv
  • Las barras diagonales (/) son más seguras que las barras invertidas (\)

✔ Flujo rápido de solución de problemas para incidencias de INFILE

  1. ¿Añadiste LOCAL?
  2. SHOW VARIABLES LIKE 'local_infile';
  3. SHOW VARIABLES LIKE 'secure_file_priv';
  4. Verifica los privilegios (SHOW GRANTS)
  5. Verifica la ruta (ruta absoluta)

En este orden, puedes resolver la mayoría de los casos.

6. Importar vía GUI (Workbench / phpMyAdmin)

La línea de comandos es la más estable, pero existen situaciones en las que se desea usar herramientas GUI.
Aquí nos centraremos en los puntos comunes donde la gente se atasca en el trabajo real.

6.1 Importar con MySQL Workbench

Importar un archivo SQL (restaurar copia de seguridad)

  1. Iniciar Workbench
  2. Menú → Server → Data Import
  3. Seleccionar “Import from Self-Contained File”
  4. Seleccionar el archivo .sql
  5. Seleccionar el esquema de destino (base de datos)
  6. Hacer clic en “Start Import”

Importar CSV (por tabla)

  1. Click derecho sobre la tabla de destino
  2. Seleccionar Table Data Import Wizard
  3. Seleccionar el archivo CSV
  4. Definir el delimitador y si hay encabezado
  5. Ejecutar

⚠ Razones comunes por las que Workbench se queda trabado

  • Archivos grandes (cientos de MB o más)
  • Timeouts
  • Incompatibilidad de codificación
  • Restricciones secure_file_priv

👉 Para archivos grandes o entornos de producción, se recomienda la CLI.

6.2 Importar con phpMyAdmin

Pasos

  1. Seleccionar la base de datos de destino
  2. Abrir la pestaña “Import”
  3. Elegir un archivo
  4. Seleccionar el formato (SQL / CSV)
  5. Ejecutar

⚠ Limitaciones de phpMyAdmin

① Límite de tamaño de carga

upload_max_filesize
post_max_size

Los archivos grandes fallarán.

② Timeout
max_execution_time

Las importaciones de larga duración pueden detenerse a mitad de proceso.

③ Falta de memoria
memory_limit

6.3 Cuándo deberías usar GUI

  • Conjuntos de datos pequeños (unos pocos MB)
  • Entornos de desarrollo
  • Trabajo temporal puntual

6.4 Cuándo deberías usar CLI (recomendado)

  • Entornos de producción
  • Decenas de MB o más
  • Importaciones de CSV grandes
  • Cuando necesitas análisis de errores
  • Migraciones de servidor a servidor

✔ Conclusión práctica

GUI es “fácil”, pero
CLI es abrumadoramente mejor para la estabilidad, reproducibilidad y manejo de archivos grandes.

Para la resolución de problemas, aprender operaciones en CLI es finalmente lo recomendado.

7. Solución de problemas (Por error: Causa → Solución más rápida)

La mayoría de los errores de importación en MySQL son altamente estructurados.
Aquí los organizaremos en el orden “causa → primera acción → comando de verificación”.

7.1 ERROR 1148 (42000)

El comando usado no está permitido con esta versión de MySQL

🔎 Causa

  • LOAD DATA LOCAL INFILE está deshabilitado
  • local_infile está OFF

✅ Solución más rápida

① Verificar la configuración actual

SHOW VARIABLES LIKE 'local_infile';

② Habilitar al conectar (lado del cliente)

mysql --local-infile=1 -u user -p

③ Habilitar permanentemente (si es necesario)

[mysqld]
local_infile=1

→ Reiniciar MySQL

7.2 ERROR 1366

Valor de cadena incorrecto

🔎 Causa

  • Incompatibilidad de codificación
  • Inconsistencia entre utf8 y utf8mb4
  • Mezcla de Shift-JIS

✅ Solución más rápida

① Verificar el conjunto de caracteres actual

SHOW VARIABLES LIKE 'character_set%';

② Convertir la tabla a utf8mb4

ALTER TABLE example_table CONVERT TO CHARACTER SET utf8mb4;

③ Especificarlo explícitamente al importar

mysql --default-character-set=utf8mb4 -u user -p db < file.sql

7.3 ERROR 1062

Entrada duplicada

🔎 Causa

  • Claves primarias duplicadas
  • Violación de restricción UNIQUE

✅ Opciones de solución

Opción 1: Ignorar duplicados
LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE example_table
IGNORE;
Opción 2: Actualizar en caso de duplicado
INSERT INTO example_table (id, name)
VALUES (1,'John')
ON DUPLICATE KEY UPDATE name=VALUES(name);
Opción 3: Usar una tabla de staging
CREATE TEMPORARY TABLE temp LIKE example_table;
-- LOAD into temp first
INSERT INTO example_table
SELECT * FROM temp;

7.4 ERROR 1045

Acceso denegado para el usuario

🔎 Causa

  • Privilegios insuficientes en la base de datos
  • Privilegio FILE insuficiente
  • Permisos del SO insuficientes para la ruta

✅ Verificar

SHOW GRANTS FOR 'user'@'localhost';

✅ Privilegios de ejemplo requeridos

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

※ Ten cuidado al otorgar el privilegio FILE.

7.5 Se detiene a mitad de proceso en archivos grandes

🔎 Causa

  • Tiempo de espera
  • Falta de memoria
  • Límites de PHP (phpMyAdmin)

✅ Contramedidas más rápidas

Aumentar los tiempos de espera
SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;
Dividir el archivo
split -l 100000 large.csv part_

✔ Flujo de resolución de errores (más rápido)

  1. Verificar la codificación
  2. Verificar local_infile
  3. Verificar secure_file_priv
  4. Verificar privilegios
  5. Verificar los finales de línea ( \n / \r\n )

En este orden, puedes resolver la mayoría de los problemas.

8. Técnicas del mundo real para conjuntos de datos grandes (operaciones a prueba de fallos)

Al importar cientos de miles a millones de filas,
los métodos habituales pueden ser lentos, detenerse o fallar.

A continuación se presentan técnicas estables que se usan comúnmente en producción.

8.1 Dividir el archivo e importar en etapas

Alimentar un CSV/SQL enorme de una sola vez puede causar problemas de memoria y de tiempo de espera.

✔ Linux / Mac

split -l 100000 large.csv part_

→ Dividir en 100.000 líneas por parte

✔ Windows (ejemplo de PowerShell)

Get-Content large.csv -TotalCount 100000 > part_1.csv

✔ Beneficios de importaciones por etapas

  • Más fácil de reintentar después de una falla parcial
  • Más fácil de localizar la ubicación del error
  • Carga del servidor más estable

8.2 Desactivar temporalmente índices y claves foráneas

Durante la importación, las actualizaciones de índices a menudo se convierten en el cuello de botella.

✔ Desactivar temporalmente índices

ALTER TABLE example_table DISABLE KEYS;
-- LOAD DATA
ALTER TABLE example_table ENABLE KEYS;

※ Principalmente para MyISAM. Efecto limitado para InnoDB.

✔ Desactivar claves foráneas

SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;

8.3 Controlar autocommit (acelerar)

SET autocommit=0;
-- LOAD DATA
COMMIT;
SET autocommit=1;

8.4 Configuraciones recomendadas para cargas masivas

SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
SET AUTOCOMMIT=0;

Después de la importación:

COMMIT;
SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;
SET AUTOCOMMIT=1;

⚠ Usar con cuidado en producción.

8.5 Aumentar los tiempos de espera

SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;

8.6 Estrategia de tabla de staging (operaciones seguras)

En lugar de importar directamente a la tabla de producción, usa primero una tabla de validación.

CREATE TABLE staging LIKE example_table;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE staging;

Después de la validación:

INSERT INTO example_table
SELECT * FROM staging;

✔ Patrón del mundo real más estable

  1. Cargar en una tabla de staging
  2. Verificar recuentos de filas
  3. Validar restricciones
  4. Aplicar a producción
  5. Guardar registros

✔ Conclusión para datos grandes

  • Usar CLI siempre que sea posible
  • Dividir importaciones
  • Pasar por staging
  • Desactivar temporalmente restricciones
  • Verificar registros

Esto mantendrá las importaciones estables incluso con millones de filas.

9. Preguntas frecuentes (Preguntas comunes)

A continuación se presentan respuestas rápidas y prácticas a preguntas frecuentes sobre importación en MySQL.

Q1. ¿Puedo importar solo columnas específicas de un CSV?

Sí, puedes.

Puedes asignar columnas innecesarias a una variable (como @dummy) y omitirlas.

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);

Si solo deseas ciertas columnas, asegúrate de especificar explícitamente el orden de las columnas.

Q2. ¿Cómo trato las celdas en blanco como NULL?

Usa NULLIF().

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(name, @age)
SET age = NULLIF(@age,'');

Esto convierte cadenas vacías (») a NULL.

Q3. ¿Cómo omito la fila de encabezado?

IGNORE 1 LINES

Ejemplo:

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Q4. ¿Cómo puedo validar los resultados de la importación?

✔ Verificar recuentos de filas

SELECT COUNT(*) FROM example_table;

✔ Verificar advertencias/errores

Revisa las advertencias de MySQL:

SHOW WARNINGS;

✔ Estrategia de tabla de staging (recomendada)

Cargar primero en una tabla de staging y luego aplicar a producción.

Q5. ¿Cuál método es el más rápido?

Conclusión:

  • CSV → LOAD DATA LOCAL INFILE (más rápido)
  • Restauración de copia de seguridad → comando mysql

La GUI es conveniente, pero la CLI gana en velocidad y estabilidad.

Q6. Obtengo un error de fin de línea en Windows

Se debe a los finales de línea.

Windows:

LINES TERMINATED BY '\r\n'

Linux / Mac:

LINES TERMINATED BY '\n'

Q7. Obtengo un error secure_file_priv

Verificar:

SHOW VARIABLES LIKE 'secure_file_priv';

Solución:

  • Colocar el CSV en el directorio permitido
  • O usar LOCAL

✔ Resumen de FAQ

  • Mapeo de columnas → @dummy
  • Conversión a NULL → NULLIF
  • Omitir encabezado → IGNORE 1 LINES
  • Importación de alta velocidad → LOAD DATA
  • Principales puntos “atascados” → local_infile / secure_file_priv / codificación

10. Resumen

Las importaciones en MySQL pueden parecer complejas al principio, pero una vez organizadas por objetivo, son muy sencillas.

Recapitulemos los caminos más cortos al éxito.

✔ Restaurar un archivo SQL (.sql)

Más rápido y estable:

mysql -u user -p dbname < backup.sql
  • Verificar si la base de datos existe
  • Verificar privilegios
  • Recomendar utf8mb4 para la codificación

✔ Importar CSV (rápido)

Forma básica:

LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Puntos clave:

  • Finales de línea de Windows → \r\n
  • Cadenas vacías → NULLIF()
  • Si falla, verificar local_infile

✔ Orden de verificación para solución de problemas

  1. Codificación (recomendar utf8mb4)
  2. SHOW VARIABLES LIKE 'local_infile';
  3. SHOW VARIABLES LIKE 'secure_file_priv';
  4. Privilegios (SHOW GRANTS)
  5. Finales de línea

En este orden, puedes resolver la mayoría de los problemas.

✔ Reglas de oro para conjuntos de datos grandes

  • Usar CLI
  • Dividir importaciones
  • Pasar por una tabla de staging
  • Desactivar temporalmente claves foráneas/constraints
  • Revisar logs

✔ Conclusión final

  • Restauración de copia de seguridad → comando mysql
  • Importación de CSV de alta velocidad → LOAD DATA LOCAL INFILE
  • Tareas pequeñas puntuales → GUI

Si no estás seguro, usar la CLI es la opción más estable.

Con esto, ahora tienes un conjunto completo de conocimientos para importaciones en MySQL.

Pruébalo en tu entorno y construye un flujo de trabajo operativo estable.