PhpMyAdmin no puede importar ficheros CSV de gran tamaño, para ello habrá que usar la consola de MySQL y realizar desde allí la importación.
El comando MySQL LOAD DATA INFILE permite leer registros desde un fichero de texto (CSV), donde se pueden determinar las características de los datos a importar, como el carácter de separación (coma, punto y coma, etc.) entre campo o el carácter de fin de línea (CR, CRLF, etc.) y más.
Si nos muestra el siguiente error:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Se corrige así: mysql –local-infile=1 -u user -p
Un ejemplo:
USE nombre-de-la-basededatos;
LOAD DATA LOCAL INFILE '/home/user/fichero.csv' INTO TABLE nombre-de-la-tabla FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' CHARACTER SET 'utf8' IGNORE 1 LINES;
El ejemplo procesará el archivo sitiuado en /home/user y con nobre fichero.csv, añadiendo los datos en la tabla «nombre-de-la-tabla», indicando que los campos están separados por punto y coma y las líneas acaban con «CRLF» (Windows). Además se salta la línea, donde suelen estar los nombre de cabecera (IGNORE) .
Otro ejemplo:
USE nombre-de-la-basededatos;
LOAD DATA INFILE '/home/user/fichero.csv' INTO TABLE nombre-de-la-tabla FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
En este caso indica que los campos están separados por coma y delimitados por comillas (CSV estándar) y las líneas acaban con «LF» (Linux).
Si en el proceso de importación os nuestra el error:
ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement
Quiere decir que MySQL server tiene activado –secure-file-priv una opción que sólo permite leer ficheros subidos a un directorio determinado para leer ficheos con la función LOAD DATA INFILE.
Se puede averiguar el directorio SECURE_FILE_PRIV con la sentencia:
SHOW VARIABLES LIKE "secure_file_priv";
o
mysql> SELECT @@GLOBAL.secure_file_priv;
Se puede hacer dos cosas
- Mover el .csv al directrio secure-file-priv.
- Desactivar secure-file-priv en el fichero de configuración my.ini:
Editar: /etc/mysql/my.cnf
[mysqld] . . . secure_file_priv=/var/lib/mysql-files/ . . .
Modificar la línea secure_file_priv por directorio deseado.
Reinciar MySql.