Importar un fichero CSV grande a MySQL

El objetivo es importar los ficheros GeoLite que ofrece MaxMind para poder geolocalizar usuarios. Son dos ficheros, GeoLiteCity-location.csv de 21MB y GeoLiteCity-Blocks.csv de 64MB. PhpMyAdmin ofrece la posibilidad de importar ficheros CSV, pero claro, tienen que tener un tamaño razonable. Con estos no puede, y aunque consiguiéramos que funcionara, la importación sería tremendamente lenta.

Por eso la mejor opción es usar la línea de comandos de MySQL. En mi caso uso WAMP, así que para acceder a la línea de comandos hacemos lo siguiente:

  1. Inicio->Ejecutar->cmd
  2. Vamos a c:\wamp\bin\mysql\mysql5.5.24\bin. Esta ruta puede cambiar dependiendo la versión de MySQL que esté instalada.
  3. Ejecutamos: mysql.exe -u root

Ahora que estamos en la consola de MySQL haremos la importación del fichero CSV. Supongamos que el fichero está en c:\fichero.csv y lo queremos meter en la tabla locations de la base de datos geolocalizacion. Primero accedemos a la base de datos:

USE geolocalizacion

Después importamos:

LOAD DATA LOCAL INFILE 'c:/fichero.csv'
INTO TABLE location
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

En este caso los campos del fichero CSV están en el mismo orden que en la tabla. Si el orden fuese diferente, añadiríamos a la importación la opción:

(campo1, campo2, campo3, ...);