如何在 MySQL 中创建数据库以导入 Maxmind GeoLite2 city csv
Posted
技术标签:
【中文标题】如何在 MySQL 中创建数据库以导入 Maxmind GeoLite2 city csv【英文标题】:How to create database in MySQL for import Maxmind GeoLite2 city csv 【发布时间】:2016-06-10 11:43:22 【问题描述】:如何在 mysql 中创建用于导入 Maxmind GeoLite2 城市 csv 的数据库? 我需要知道我必须使用哪些类型的字段以及如何正确连接数据库中的表以从 csv 文件导入。
这是我的 SQL 代码示例:
DROP TABLE IF EXISTS location;
CREATE TABLE IF NOT EXISTS `location` (
`geoname_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`locale_code` varchar(2) DEFAULT NULL,
`continent_code` varchar(2) DEFAULT NULL,
`continent_name` varchar(20) DEFAULT NULL,
`country_iso_code` varchar(2) DEFAULT NULL,
`country_name` varchar(50) DEFAULT NULL,
`subdivision_1_iso_code` varchar(20) DEFAULT NULL,
`subdivision_1_name` varchar(70) DEFAULT NULL,
`subdivision_2_iso_code` varchar(20) DEFAULT NULL,
`subdivision_2_name` varchar(70) DEFAULT NULL,
`city_name` varchar(100) DEFAULT NULL,
`metro_code` int(11) DEFAULT NULL,
`time_zone` varchar(100) DEFAULT NULL,
PRIMARY KEY (`geoname_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS blocks_IPv4;
CREATE TABLE `blocks_IPv4` (
`network` varchar(30) DEFAULT NULL,
`geoname_id` int(11) DEFAULT NULL,
`registered_country_geoname_id` int(11) DEFAULT NULL,
`represented_country_geoname_id` int(11) DEFAULT NULL,
`is_anonymous_proxy` tinyint(1) DEFAULT '0',
`is_satellite_provider` tinyint(1) DEFAULT '0',
`postal_code` varchar(45) DEFAULT NULL,
`latitude` float DEFAULT NULL,
`longitude` float DEFAULT NULL,
`accuracy_radius` INT(5)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS blocks_IPv6;
CREATE TABLE `blocks_IPv6` (
`network` varchar(255) DEFAULT NULL,
`geoname_id` int(11) DEFAULT NULL,
`registered_country_geoname_id` int(11) DEFAULT NULL,
`represented_country_geoname_id` int(11) DEFAULT NULL,
`is_anonymous_proxy` tinyint(1) DEFAULT '0',
`is_satellite_provider` tinyint(1) DEFAULT '0',
`postal_code` varchar(45) DEFAULT NULL,
`latitude` float DEFAULT NULL,
`longitude` float DEFAULT NULL,
`accuracy_radius` INT(5)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
【问题讨论】:
【参考方案1】:您可以使用我的工具从 GitHub https://github.com/mbto/maxmind-geoip2-csv2sql-converter 将 MaxMind GeoLite2 国家/城市 CSV 转换为 MySQL/PostgreSQL/Microsoft SQL Server 2019
您可以阅读examples,或按照以下步骤操作:
-
在https://support.maxmind.com/account-faq/license-keys/how-do-i-generate-a-license-key/ 获取 MaxMind API 的免费许可证密钥(如果您没有)
在adoptopenjdk.net 或github.com/raphw/raphw.github.io 或oracle.com/java 安装Java 11(如果未安装)
从releases(.zip 或 .tar)下载工具
解压到你的目录
使用您的个人资料名称复制/粘贴 .ini 模板
bin/GeoLite2-City-CSV.mysql.default.ini
,例如 bin/GeoLite2-City-CSV.mysql.Your Project Name.ini
或使用默认值。
使用记事本打开 .ini 模板并更改 [windows_loader]
或 [unix_loader]
部分(设置 MySQL 主机:端口、用户和密码)。
对于 unix:执行 chmod +x maxmind-geoip2-csv2sql-converter
运行转换:maxmind-geoip2-csv2sql-converter.bat -c "GeoLite2-City-CSV.mysql.Your Project Name.ini" -k Your_License_Key -i 4,6
转换后,脚本bin/converted/loader.bat
和bin/converted/loader.sh
将可用。
对于 unix:执行 chmod +x loader.sh
执行loader.bat
或loader.sh
以导入架构。
完成
【讨论】:
以上是关于如何在 MySQL 中创建数据库以导入 Maxmind GeoLite2 city csv的主要内容,如果未能解决你的问题,请参考以下文章