Importar Geolite2 en MySQL

Tras el análisis realizado de la base de datos de Maxmind en la cual se puede relacionar cada IP con la localización (ciudad/estado/país) de la misma, es conveniente poder importarla a la base de datos con la que se esté trabajando para que sea más fácil analizar los datos.

Para ello, se va a importar GeoLite2 en MySQL, en concreto la versión City que contiene la información de las localizaciones desglosada también por ciudades. Con el análisis anterior realizado está claro cuales deben ser los campos. De esta forma, lo primero sería ejecutar los scripts de creación de las tablas blocks y location, los cuales deberían ser semejantes a los siguientes.

CREATE DATABASE geoip;
USE geoip;

DROP TABLE IF EXISTS blocks;
CREATE TABLE blocks (
network_start_ip varchar(100),
network_prefix_length int(3),
geoname_id int(10) unsigned,
registered_country_geoname_id int,
represented_country_geoname_id int,
postal_code varchar(10),
latitude decimal,
longitude decimal,
is_anonymous_proxy bit,
is_satellite_provider bit
);

DROP TABLE IF EXISTS location;
CREATE TABLE location(
geoname_id int(10) unsigned NOT NULL,
continent_code char(2),
continent_name varchar(50),
country_iso_code char(2),
country_name varchar(50),
subdivision_iso_code varchar(3),
subdivision_name varchar(50),
city_name varchar(50),
metro_code int,
time_zone int,
PRIMARY KEY (geoname_id)
);

Una vez creadas las tablas, ya sólo queda rellenarlas con los datos de Maxmind GeoLite2. Para rellenarlas, se parte de los ficheros .csv que habrán sido previamente descargados y descomprimidos. MySQL contiene una instrucción llamada LOAD DATA, con la cual se puede descargar la información de un fichero (en este caso un csv) en una tabla, simplemente con que coincida el orden y tipo de los campos. Solo se le debe indicar cuál es el carácter que actúa de separador de los campos (,), con qué carácter termina cada línea («\n») y que la primera línea será ignorada ya que contiene el nombre de las columnas y no interesa insertarla en la base de datos.

Dicho esto, el script será parecido a este.

LOAD DATA LOCAL INFILE 'D:/GeoLite2-City-Blocks.csv'
INTO TABLE geoip.blocks
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
LOAD DATA LOCAL INFILE 'D:/GeoLite2-City-Locations.csv'
INTO TABLE geoip.location
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Puede tardar un poco, ya que son ficheros grandes, pero al final los tendremos en la base de datos. Luego ya se podría crear índices para optimizar las búsquedas, según las necesidades que se tenga con la geolocalización maxmind.

Deja un comentario

Pin It on Pinterest