- 1 1. Lo que podrás hacer en este artículo
- 2 2. Tipos de importaciones MySQL y cuándo usar cada una
- 3 3. Importación de un archivo SQL (La ruta más rápida al éxito)
- 4 4. Importación de CSV (Lo más importante: Más rápido con LOAD DATA)
- 4.1 4.1 Primero: Prerrequisitos de CSV
- 4.2 4.2 Forma básica lista para copiar y pegar (CSV con encabezado)
- 4.3 4.3 Importar solo las columnas que necesitas
- 4.4 4.4 Convertir fechas y tipos durante la importación
- 4.5 4.5 Para archivos delimitados por tabulaciones (TSV)
- 4.6 4.6 Mejorar el rendimiento aún más (para datos grandes)
- 4.7 ✔ Forma práctica recomendada
- 5 5. Las 4 principales razones por las que INFILE falla (Sección más importante)
- 5.1 5.1 Diferencia entre INFILE y LOCAL INFILE
- 5.2 5.2 local_infile está deshabilitado (causa del ERROR 1148)
- 5.3 5.3 Restricción secure_file_priv
- 5.4 5.4 Privilegios insuficientes (privilegio FILE / permisos del SO)
- 5.5 5.5 Especificación de ruta incorrecta
- 5.6 ✔ Flujo rápido de solución de problemas para incidencias de INFILE
- 6 6. Importar vía GUI (Workbench / phpMyAdmin)
- 7 7. Solución de problemas (Por error: Causa → Solución más rápida)
- 8 8. Técnicas del mundo real para conjuntos de datos grandes (operaciones a prueba de fallos)
- 8.1 8.1 Dividir el archivo e importar en etapas
- 8.2 8.2 Desactivar temporalmente índices y claves foráneas
- 8.3 8.3 Controlar autocommit (acelerar)
- 8.4 8.4 Configuraciones recomendadas para cargas masivas
- 8.5 8.5 Aumentar los tiempos de espera
- 8.6 8.6 Estrategia de tabla de staging (operaciones seguras)
- 8.7 ✔ Patrón del mundo real más estable
- 8.8 ✔ Conclusión para datos grandes
- 9 9. Preguntas frecuentes (Preguntas comunes)
- 9.1 Q1. ¿Puedo importar solo columnas específicas de un CSV?
- 9.2 Q2. ¿Cómo trato las celdas en blanco como NULL?
- 9.3 Q3. ¿Cómo omito la fila de encabezado?
- 9.4 Q4. ¿Cómo puedo validar los resultados de la importación?
- 9.5 Q5. ¿Cuál método es el más rápido?
- 9.6 Q6. Obtengo un error de fin de línea en Windows
- 9.7 Q7. Obtengo un error secure_file_priv
- 9.8 ✔ Resumen de FAQ
- 10 10. Resumen
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

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 DATAes 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)
| Method | Speed | Stability | Large-file support | Error analysis | Recommendation |
|---|---|---|---|---|---|
| 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:
- Verifica el principio y el final del archivo
head backup.sql tail backup.sql
- Verifica las líneas justo antes del error
- 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
LOCALLee un archivo del lado del cliente (requerido en muchos entornos)IGNORE 1 LINESOmite la fila de encabezado@ageVariable temporal usada para transformar el valor antes de almacenarloNULLIF()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 servidorLOAD 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.
| Command | Where it reads from | Typical use |
|---|---|---|
LOAD DATA INFILE | File on the server | A fixed path on the server |
LOAD DATA LOCAL INFILE | File on the client | A CSV on your local PC |
Malentendidos comunes
- Intentar leer un archivo local del PC con
INFILEy 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
- ¿Añadiste
LOCAL? SHOW VARIABLES LIKE 'local_infile';SHOW VARIABLES LIKE 'secure_file_priv';- Verifica los privilegios (SHOW GRANTS)
- 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)
- Iniciar Workbench
- Menú → Server → Data Import
- Seleccionar “Import from Self-Contained File”
- Seleccionar el archivo
.sql - Seleccionar el esquema de destino (base de datos)
- Hacer clic en “Start Import”
Importar CSV (por tabla)
- Click derecho sobre la tabla de destino
- Seleccionar Table Data Import Wizard
- Seleccionar el archivo CSV
- Definir el delimitador y si hay encabezado
- 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
- Seleccionar la base de datos de destino
- Abrir la pestaña “Import”
- Elegir un archivo
- Seleccionar el formato (SQL / CSV)
- 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_timeLas importaciones de larga duración pueden detenerse a mitad de proceso.
③ Falta de memoria
memory_limit6.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 INFILEestá deshabilitadolocal_infileestá 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)
- Verificar la codificación
- Verificar
local_infile - Verificar
secure_file_priv - Verificar privilegios
- 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
- Cargar en una tabla de staging
- Verificar recuentos de filas
- Validar restricciones
- Aplicar a producción
- 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
utf8mb4para 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
- Codificación (recomendar utf8mb4)
SHOW VARIABLES LIKE 'local_infile';SHOW VARIABLES LIKE 'secure_file_priv';- Privilegios (SHOW GRANTS)
- 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.


