¿Cómo importar un archivo SQL de base de datos en PHPMyAdmin?

¿Cómo importar archivos a MySQL?

Valoración: 4.79 (1775 votos)

La importación de archivos a bases de datos MySQL es una tarea fundamental para desarrolladores y administradores. Ya sea que necesites cargar grandes volúmenes de datos, restaurar una copia de seguridad previamente creada o aplicar cambios de estructura y contenido definidos en un script, saber cómo manejar estos archivos es crucial. Este artículo te guiará a través de los métodos más comunes para importar archivos, centrándonos en la potente interfaz de línea de comandos.

https://www.youtube.com/watch?v=0gcJCdgAo7VqN5tD

Existen principalmente dos tipos de archivos que querrás importar a MySQL: archivos .sql que contienen sentencias SQL y archivos .csv que contienen datos planos delimitados.

¿Cómo agrego un archivo en MySQL?
Importar un archivo SQL a MySQL Antes de importar un archivo SQL, debe crear una base de datos en MySQL. Para crear una nueva base de datos, puede ejecutar el siguiente comando: mysql> CREATE DATABASE my_database; Donde reemplaza "my_database" con el nombre de su base de datos.
Índice de Contenido

Importando Archivos SQL Usando la Línea de Comandos

Un archivo .sql es esencialmente un script que contiene una serie de comandos SQL. Estos comandos pueden ser desde la creación de tablas (DDL - Data Definition Language) hasta la inserción de datos (DML - Data Manipulation Language), o una combinación de ambos, como los generados por herramientas de copia de seguridad como `mysqldump`. La línea de comandos de MySQL (`mysql` client) es una herramienta muy eficiente para ejecutar estos scripts.

Paso 1: Conectarse al Servidor MySQL

Lo primero que necesitas es abrir una terminal o línea de comandos en tu sistema operativo y conectarte al servidor MySQL. Utiliza el siguiente comando, reemplazando `nombre_usuario` por tu nombre de usuario de MySQL:

mysql -u nombre_usuario -p

Se te pedirá que introduzcas tu contraseña. Una vez que la ingreses correctamente, verás el prompt de MySQL (`mysql>`).

Paso 2: Crear la Base de Datos (Si No Existe)

Antes de importar un archivo SQL, necesitas asegurarte de que la base de datos de destino exista. Si el archivo SQL que vas a importar incluye comandos para crear la base de datos (como suele ocurrir con los dumps completos), podrías saltarte este paso y ejecutar el comando de importación directamente (a veces especificando la base de datos después del comando de importación, o simplemente ejecutándolo sin seleccionar una base de datos si el script la crea y la selecciona internamente). Sin embargo, si el archivo solo contiene sentencias para tablas y datos, o si prefieres tener el control, puedes crear la base de datos manualmente:

CREATE DATABASE mi_base_de_datos;

Reemplaza `mi_base_de_datos` con el nombre que deseas para tu base de datos.

Paso 3: Seleccionar la Base de Datos

Una vez que la base de datos existe (o si el archivo SQL asume que ya existe y no la crea), debes seleccionarla para que los comandos del archivo se apliquen a ella. Esto se hace con el comando `USE`:

USE mi_base_de_datos;

Ahora cualquier comando SQL que ejecutes se aplicará a `mi_base_de_datos`. Nota importante: Algunos archivos SQL generados por herramientas de respaldo ya incluyen la línea `USE nombre_de_la_base_de_datos;` al principio. Si este es el caso, puedes saltarte este paso explícito después de conectarte, o incluso especificar la base de datos directamente en el comando de importación inicial (ver siguiente paso alternativo).

Paso 4: Importar el Archivo SQL

Con la base de datos seleccionada, puedes ejecutar el archivo SQL utilizando el comando `SOURCE` dentro del prompt de MySQL:

SOURCE /ruta/al/archivo.sql;

Reemplaza `/ruta/al/archivo.sql` con la ruta completa y el nombre de tu archivo SQL. El cliente MySQL leerá y ejecutará cada sentencia en el archivo.

Una alternativa si no has seleccionado la base de datos con `USE` es ejecutar la importación directamente desde la línea de comandos de tu sistema operativo (sin entrar primero al prompt `mysql>`), especificando la base de datos:

mysql -u nombre_usuario -p mi_base_de_datos < /ruta/al/archivo.sql

Introduce la contraseña cuando se te solicite. Este método es a menudo más conveniente para scripts grandes o para automatización.

Si la importación es exitosa, verás mensajes indicando el resultado de cada comando ejecutado, o simplemente el prompt volverá a aparecer si no hay errores.

Errores Comunes Durante la Importación de Archivos SQL

Durante el proceso de importación, puedes encontrarte con algunos errores. Aquí te presentamos los más comunes y cómo abordarlos:

  • "Access denied for user 'nombre_usuario'@'localhost'": Este error indica que el usuario con el que intentas conectarte no tiene los permisos necesarios para acceder a MySQL o a la base de datos especificada, o que la contraseña es incorrecta. Verifica tus credenciales y asegúrate de que el usuario tenga los permisos adecuados (por ejemplo, usando sentencias GRANT).
  • "Unknown database 'mi_base_de_datos'": Ocurre si intentas seleccionar (`USE`) o importar a una base de datos que no existe. Asegúrate de que el nombre de la base de datos sea correcto y que la hayas creado previamente (Paso 2) si es necesario.
  • "Syntax error": Este es un error en el propio archivo SQL. MySQL encontró una sentencia que no entiende. Revisa el archivo `.sql` en la línea o cerca de la línea indicada en el mensaje de error para corregir cualquier error de sintaxis, errores tipográficos o caracteres especiales incorrectos.
  • "Table 'nombre_tabla' already exists": Sucede si el archivo SQL intenta crear una tabla (`CREATE TABLE`) que ya existe en la base de datos seleccionada. Si quieres sobrescribir las tablas existentes, puedes considerar:
    • Borrar la base de datos completa antes de importar (DROP DATABASE mi_base_de_datos; y luego CREATE DATABASE mi_base_de_datos;).
    • Modificar el archivo SQL para incluir DROP TABLE IF EXISTS nombre_tabla; antes de cada CREATE TABLE.
    • Usar la opción `--force` con el cliente `mysql` (mysql --force -u ... < ...), aunque esto puede ser arriesgado ya que continuará a pesar de los errores.

Importando Archivos CSV Usando la Línea de Comandos

Los archivos CSV (Comma Separated Values) son un formato común para intercambiar datos planos. MySQL proporciona el comando `LOAD DATA INFILE` para importar datos directamente desde un archivo CSV (u otros archivos de texto delimitado) a una tabla existente.

Para importar un archivo CSV, sigue los pasos 1 a 3 de la sección anterior (conectar, crear base de datos si es necesario, seleccionar base de datos). Asegúrate de que la tabla de destino en la base de datos ya exista y tenga la estructura adecuada para recibir los datos del CSV.

¿Cómo abro un archivo de base de datos MySQL?
Utilice la ventana del navegador de archivos para buscar su archivo SQL y haga clic en su nombre para seleccionarlo. Haga clic en "Abrir" en la esquina inferior derecha . Este botón se encuentra en la esquina inferior derecha de la ventana emergente del navegador de archivos. Abrirá el contenido de su archivo SQL en la aplicación MySQL Workbench.

Paso 4: Importar el Archivo CSV

Dentro del prompt de MySQL (`mysql>`), utiliza el comando `LOAD DATA INFILE`:

LOAD DATA INFILE '/ruta/al/archivo.csv' INTO TABLE nombre_tabla FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;

Analicemos las partes de este comando:

  • `LOAD DATA INFILE '/ruta/al/archivo.csv'`: Especifica la ruta completa al archivo CSV que quieres importar. Es importante notar que, por defecto, MySQL requiere que el archivo se encuentre en una ubicación a la que el servidor MySQL tenga acceso de lectura, o en un directorio especial configurado para importaciones seguras (`secure_file_priv`). A menudo, este directorio es `/var/lib/mysql-files/` en sistemas Linux, o similar en otros sistemas. Puedes necesitar mover tu archivo CSV a esta ubicación o configurar MySQL para permitir la carga desde otras rutas (con precaución por seguridad).
  • `INTO TABLE nombre_tabla`: Indica la tabla de destino donde se insertarán los datos. La tabla debe existir y sus columnas deben coincidir en orden y tipo con los datos del CSV.
  • `FIELDS TERMINATED BY ','`: Define el carácter que separa los campos (columnas) dentro de cada línea del archivo CSV. La coma es el más común.
  • `ENCLOSED BY '"'`: Especifica el carácter que encierra los valores de los campos, útil si los datos contienen el carácter delimitador (como comas dentro de un texto). Las comillas dobles (`"`) son estándar en CSV.
  • `LINES TERMINATED BY '\n'`: Define el carácter que marca el final de cada línea (fila) en el archivo. ` ` es el salto de línea estándar de Unix/Linux. En Windows, podría ser ` `.
  • `IGNORE 1 ROWS`: Esta cláusula es opcional y muy útil para saltar la primera línea del archivo si contiene encabezados (nombres de columna). Si tu archivo no tiene encabezados, omite esta línea.

Asegúrate de ajustar `TERMINATED BY`, `ENCLOSED BY`, `LINES TERMINATED BY` y `IGNORE N ROWS` según el formato específico de tu archivo CSV.

Verificar la Importación CSV

Después de ejecutar el comando `LOAD DATA INFILE`, puedes verificar que los datos se importaron correctamente ejecutando una consulta simple:

SELECT COUNT(*) FROM nombre_tabla;

SELECT * FROM nombre_tabla LIMIT 10;

La primera te dirá cuántas filas se importaron, y la segunda te mostrará las primeras filas para que puedas inspeccionar los datos.

Consideraciones Adicionales para CSV

  • Permisos de Archivo y `secure_file_priv`: Como se mencionó, MySQL necesita poder leer el archivo. El valor de la variable de sistema `secure_file_priv` restringe desde dónde se pueden cargar archivos. Consulta el valor de esta variable (`SHOW VARIABLES LIKE 'secure_file_priv';`) para saber qué directorios están permitidos o si está deshabilitado (en cuyo caso no podrás usar `LOAD DATA INFILE` a menos que lo configures).
  • Coincidencia de Columnas y Tipos de Datos: El orden de los datos en el CSV debe coincidir con el orden de las columnas en la tabla de destino. Además, los datos en cada columna del CSV deben ser compatibles con el tipo de datos de la columna correspondiente en la tabla (por ejemplo, no intentar importar texto en una columna numérica). Los errores de tipo de datos pueden causar que filas enteras fallen en la importación o que se inserten valores `NULL` o truncados.
  • Manejo de NULLs: Si tu archivo CSV tiene campos vacíos que corresponden a columnas que aceptan `NULL`, generalmente funcionará bien. Si la columna no acepta `NULL`, la importación fallará para esa fila.

Generando un Dump de MySQL (Para Importar Después)

Aunque este artículo trata sobre la importación, es útil saber cómo generar un archivo SQL que luego podrás importar. Esto se hace comúnmente para crear copias de seguridad o migrar datos. La herramienta `mysqldump` se utiliza para esto.

Desde la línea de comandos de tu sistema (no dentro del prompt `mysql>`), ejecuta:

mysqldump -u nombre_usuario -p nombre_base_de_datos > archivo_copia_seguridad.sql

Introduce tu contraseña cuando se te solicite. Este comando generará un archivo SQL (`archivo_copia_seguridad.sql`) que contiene las sentencias `CREATE TABLE`, `INSERT` (o `INSERT IGNORE`, etc.) y otras necesarias para recrear la estructura y los datos de `nombre_base_de_datos`. Este archivo es el que luego importarías usando el método `SOURCE` o la redirección de entrada (`<`) como se explicó al principio.

Tabla Comparativa: Importación SQL vs. CSV en MySQL

CaracterísticaImportación de Archivo SQL (`SOURCE` / `<`)Importación de Archivo CSV (`LOAD DATA INFILE`)
Tipo de archivo`.sql` (Script SQL con DDL y/o DML)`.csv` (Datos planos delimitados)
Propósito principalRestaurar copias de seguridad, ejecutar scripts complejos, crear estructura y datos.Cargar grandes volúmenes de datos planos en una tabla existente.
Requisitos de la tabla de destinoEl script puede crear la tabla o basarse en tablas existentes.La tabla de destino debe existir previamente.
Comando principal`SOURCE /ruta/archivo.sql;` (dentro de mysql>)
o `mysql ... < /ruta/archivo.sql` (desde terminal)
`LOAD DATA INFILE '/ruta/archivo.csv' INTO TABLE ...;` (dentro de mysql>)
Control sobre formato de datosDepende de las sentencias `INSERT` en el archivo SQL.Alto control sobre delimitadores, encapsulamiento, saltos de línea, etc.
Manejo de erroresErrores de sintaxis o lógica SQL; la importación puede detenerse en el primer error a menos que se use `--force`.Errores de formato de datos, permisos de archivo, tipo de datos; puede fallar por fila o abortar.

Preguntas Frecuentes

¿Necesito siempre usar la línea de comandos? ¿No hay herramientas gráficas?

No, no siempre necesitas la línea de comandos. Herramientas gráficas como MySQL Workbench, phpMyAdmin o DBeaver ofrecen interfaces visuales para importar archivos SQL y CSV. Sin embargo, la línea de comandos es esencial para automatización, scripts grandes (ya que las herramientas GUI a veces tienen límites de tiempo o memoria) y cuando solo tienes acceso SSH al servidor.

¿Qué es `secure_file_priv` y por qué me da problemas al importar CSV?

`secure_file_priv` es una variable de sistema de MySQL que restringe los directorios desde/hacia donde se pueden leer/escribir archivos con comandos como `LOAD DATA INFILE` o `SELECT ... INTO OUTFILE`. Si está configurada en `NULL`, la carga/escritura de archivos está deshabilitada. Si está configurada en un directorio específico, solo se pueden usar archivos dentro de ese directorio. Debes colocar tu archivo CSV en el directorio especificado por `secure_file_priv` o ajustar la configuración de MySQL (requiere permisos de administrador y reiniciar el servidor) si necesitas usar otra ubicación.

Mi archivo SQL es muy grande y la importación falla o tarda mucho. ¿Qué puedo hacer?

Para archivos SQL muy grandes, la línea de comandos es generalmente más robusta que las herramientas GUI. Asegúrate de usar el método de redirección (`mysql -u ... < archivo.sql`) ya que suele ser más eficiente que `SOURCE`. Puedes también optimizar la configuración de MySQL temporalmente para la importación (como aumentar `max_allowed_packet` o `net_buffer_length`), aunque esto requiere conocimientos avanzados de administración. Dividir el archivo grande en partes más pequeñas también es una opción.

¿Puedo importar otros formatos de archivo además de SQL y CSV?

MySQL soporta nativamente la importación desde archivos de texto delimitados como CSV, TSV (Tab Separated Values) y formatos de ancho fijo usando `LOAD DATA INFILE` con las cláusulas apropiadas. Para otros formatos como JSON o XML, necesitarías procesar el archivo externamente y convertirlo a un formato compatible (como CSV) o usar funciones y herramientas específicas que soporten esos formatos, lo cual va más allá de la importación directa con los comandos básicos.

Dominar la importación de archivos en MySQL es una habilidad valiosa que te permitirá gestionar tus datos de manera más efectiva, ya sea para llenar una base de datos nueva, actualizar información existente o recuperar datos después de un fallo.

Si quieres conocer otros artículos parecidos a ¿Cómo importar archivos a MySQL? puedes visitar la categoría MySQL.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir