#!/bin/bash
glc_file=
"`echo GeoLiteCity_*.tar.xz`"
if
[ ! -e
"$glc_file"
] ;
then
echo
"No GLC file found in current directory."
echo
"You need to download the latest GeoLiteCity database in"
exit
1
fi
if
!
which
lzma >
/dev/null
2>&1 ;
then
echo
"WARNING:"
echo
"This script will try to unpack $glc_file using the"
echo
"tar command with the --lzma option, but lzma was not found"
echo
"on your system, so this may not work."
fi
eval
$( php -r
"include(\"config.class.php\"); print \"db='\$db' dbuser='\$user' dbpass='\$pass'\n\";"
)
mysql=
"mysql -u $dbuser --password=$dbpass --local-infile $db"
echo
"MySQL command is $mysql"
if
! $mysql -e
"show databases;"
|
grep
-q
"$db"
;
then
echo
"Database connection problem"
exit
1
fi
echo
"Purging and re-adding tables"
$mysql <<
"__END"
SET character_set_client = utf8;
DROP TABLE IF EXISTS `blocks`;
CREATE TABLE `blocks` (
`startIpNum` INT(15) UNSIGNED NOT NULL,
`endIpNum` INT(10) UNSIGNED NOT NULL,
`locId` INT(15) UNSIGNED NOT NULL
)
COLLATE=
'latin1_swedish_ci'
ENGINE=MyISAM;
DROP TABLE IF EXISTS `location`;
CREATE TABLE `location` (
`locId` INT(15) UNSIGNED NOT NULL,
`country` VARCHAR(2) NOT NULL,
`region` VARCHAR(2) NOT NULL,
`city` VARCHAR(70) NOT NULL,
`postalCode` VARCHAR(50) NULL DEFAULT NULL,
`latitude` VARCHAR(10) NOT NULL,
`longitude` VARCHAR(10) NOT NULL,
`metroCode` INT(5) UNSIGNED NULL DEFAULT NULL,
`areaCode` INT(5) UNSIGNED NULL DEFAULT NULL
)
COLLATE=
'latin1_swedish_ci'
ENGINE=MyISAM;
__END
load_foo=
'CHARACTER SET "LATIN1"'
load_foo=
"$load_foo FIELDS TERMINATED BY \",\" OPTIONALLY ENCLOSED BY '\"'"
load_foo=
"$load_foo IGNORE 2 LINES"
tar
--wildcards --lzma -xOvf
"$glc_file"
"**/GeoLiteCity-Blocks.csv"
| \
$mysql -e
'LOAD DATA LOCAL INFILE "/dev/stdin" INTO TABLE `blocks` '
" $load_foo;"
tar
--wildcards --lzma -xOvf
"$glc_file"
"**/GeoLiteCity-Location.csv"
| \
$mysql -e
'LOAD DATA LOCAL INFILE "/dev/stdin" INTO TABLE `location` '
" $load_foo (locId, country, region, city, @postalCode, latitude, longitude, @metroCode, @areaCode) set postalCode = nullif(@postalCode, ''), metroCode = nullif(@metroCode, ''), areaCode = nullif(@areaCode, '');"