IP到国家代码映射之GeoLite2导入到MySQL形成数据字典
一、准备CSV文件与MySQL表结构
- 下载并解压GeoLite2-Country-CSV数据
从 MaxMind 下载 GeoLite2-Country-CSV.zip,解压后获取以下文件:
GeoLite2-Country-Blocks-IPv4.csv:IPv4地址段与国家关联数据;
GeoLite2-Country-Locations-en.csv:国家代码与名称映射表。
在 GeoIP 数据库结构中,geoip_country_blocks(存储 IP 地址范围与国家关联关系)和 geoip_country_locations(存储国家详细信息)通过 geoname_id 字段进行关联
`2. 创建匹配的MySQL表
表1:IPv4地址段表 (geoip_country_blocks)
sql
Copy Code
CREATE TABLE geoip_country_blocks (
network VARCHAR(18) NOT NULL, -- IPv4地址段(如 1.0.0.0/24)
geoname_id INT, -- 地理位置ID
registered_country_geoname_id INT, -- 注册国家ID
represented_country_geoname_id INT, -- 代理国家ID
is_anonymous_proxy TINYINT(1), -- 是否匿名代理(0/1)
is_satellite_provider TINYINT(1), -- 是否卫星提供商(0/1)
PRIMARY KEY (network)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
表2:国家代码表 (geoip_country_locations)
sql
Copy Code
CREATE TABLE geoip_country_locations (
geoname_id INT PRIMARY KEY, -- 地理位置ID(主键)
locale_code CHAR(2), -- 语言代码(如 en)
continent_code CHAR(2), -- 大洲代码(如 AS)
continent_name VARCHAR(20), -- 大洲名称(如 Asia)
country_iso_code CHAR(2), -- 国家ISO代码(如 CN)
country_name VARCHAR(50) -- 国家名称(如 China)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
`
二、导入CSV数据到MySQL
- 使用 LOAD DATA INFILE 命令
导入IPv4地址段表
sql
Copy Code
LOAD DATA LOCAL INFILE '/path/to/GeoLite2-Country-Blocks-IPv4.csv'
INTO TABLE geoip_country_blocks
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; -- 跳过CSV首行标题:ml-citation{ref="2,3" data="citationList"}
导入国家代码表
sql
Copy Code
LOAD DATA LOCAL INFILE '/path/to/GeoLite2-Country-Locations-en.csv'
INTO TABLE geoip_country_locations
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; -- 跳过CSV首行标题:ml-citation{ref="2,3" data="citationList"}
参数说明
LOCAL:从客户端本地路径读取文件(需开启MySQL的local_infile参数);
FIELDS TERMINATED BY ',':字段分隔符为逗号;
ENCLOSED BY '"':字段值用双引号包围;
LINES TERMINATED BY '\n':行终止符为换行符(Windows生成文件需改为\r\n);
IGNORE 1 ROWS:忽略CSV文件的标题行。
三、常见问题处理字符编码冲突
若导入时出现乱码,在LOAD DATA语句中指定字符集:
sql
Copy Code
LOAD DATA ... CHARACTER SET utf8mb4 ... ; -- 指定编码为UTF-8:ml-citation权限不足或文件路径错误
确保MySQL用户有文件读取权限,并使用绝对路径:
sql
Copy Code
SHOW VARIABLES LIKE 'secure_file_priv'; -- 查看允许导入的目录:ml-citation重复数据冲突
使用REPLACE或IGNORE关键词处理主键冲突:
sql
Copy Code
LOAD DATA ... REPLACE ... ; -- 覆盖重复记录:ml-citation
四、验证导入结果
检查数据量是否匹配
sql
Copy Code
SELECT COUNT(*) FROM geoip_country_blocks; -- 对比CSV行数(排除标题行):ml-citation抽样查询示例
sql
Copy Code
SELECT * FROM geoip_country_locations
WHERE country_iso_code = 'CN'; -- 查找中国数据:ml-citation
五、图形化工具备选方案(如Navicat)
右击目标表选择“导入向导”,指定CSV文件并映射字段,适合不熟悉命令行的用户。
IP到国家代码映射之GeoLite2导入到MySQL形成数据字典的更多相关文章
- 将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库
本文内容 最近看<写给程序员的数据挖掘指南>,研究推荐算法,书中的测试数据集是 Book-Crossing Dataset 提供的亚马逊用户对书籍评分的真实数据.推荐大家看本书,写得不错, ...
- 用 cctld工具创建带有国家代码的IP地址表
用 cctld工具创建带有国家代码的IP地址表 cctld tools is creating IP addresses table with Country Code 项目地址 https://gi ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 关于Docker compose值IP与域名的映射 之 extra_host
公司的所有项目都是采用Docker容器化部署,最近有一个项目需要使用定时任务调用第三方Api,正式web环境服务器的网络与第三方网络是通畅的,但是当将代码发布到正式环境,调用接口却显示 System. ...
- CentOS6修改主机名(hostname)及 修改/etc/hosts 文件,增加ip和hostname的映射关系(转)
CentOS修改主机名(hostname) 需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常.首先切换到root用户. ...
- Magento Table Rate运费国家代码汇总
Magento Table Rate是三种内置未调用第三方API运费方式中最强大的一个.通过设置国家,区域,邮编,价格来划分不同的运费等级.该方式基本能够满足轻量级的B2C商城的运费模式.这里收集下国 ...
- Unity3D开发之“获取IOS设备所在的国家代码"
原地址:http://dong2008hong.blog.163.com/blog/static/469688272014021025578/ 在前一段时间游戏开发中需要实现获取IOS设备所在的国家代 ...
- POPTEST老李分享修改dns ip的vbs代码
POPTEST老李分享修改dns ip的vbs代码 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- C#验证ip地址的代码
如下的代码是关于C#验证ip地址的代码. public Boolean CheckIPValid(String strIP) { char chrFullStop = '.'; string[] ar ...
- JSP 获取真实IP地址的代码
[转载]JSP 获取真实IP地址的代码 JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. ...
随机推荐
- MySQL - [18] mysql中关于cascade的用法
drop database语句用于删除数据库.但如果想要删除一个数据库并且还要删除所有依赖于该数据库的存储过程.函数等,可以使用cascade关键字.drop database test cascad ...
- Linux - [-bash: jps: command not found]
jps是jdk提供的一个查看当前java进程的小工具, 全称是 JavaVirtual Machine Process Status Tool $ jps [options] [hostid] opt ...
- 《HelloGitHub》第 107 期
兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...
- Abaqus压电材料分析
目录 1. ABAQUS压电材料定义[快速版] 2. 压电材料的主要特性参数 3. Abaqus 压电分析 1 电响应 2 initial condition & BCs 4 Load 5 M ...
- faker 函数支持哪些
3.2 常用函数 除了上述介绍的fake.name和fake.address生成姓名和地址两个函数外,常用的faker函数按类别划分有如下一些常用方法. 1.地理信息类 fake.city_suffi ...
- 【Bug记录】Powershell 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 - PowerShell 执行策略
Powershell 无法将"vue"项识别为 cmdlet.函数.脚本文件或可运行程序的名称 造成该问题主要是 PowerShell 执行策略,不支持执行全局脚本和程序的运行. ...
- 通过 API 将Deepseek响应流式内容输出到前端
要实现通过 API 将流式内容输出到前端,可以采用以下技术方案(以 Python 后端 + 前端 JavaScript 为例): 方案一:使用 Server-Sent Events (SSE) 这是浏 ...
- php处理跨域
1.允许所有域名访问 header('Access-Control-Allow-Origin: *'); 2.允许单个域名访问 header('Access-Control-Allow-Origin: ...
- 面试题-RabbitMQ
前言 在面试题系列文章中,笔者本着效率的原则,没有总结RabbitMQ相关的知识,但是当其他知识点都总结完毕后,我发现如果面试中针对我们实际使用的RabbitMQ进行深入原理的提问或者说说框架使用的注 ...
- 【硬件】认识和选购4K画质的显卡
2.6 认识和选购4K画质的显卡 显卡一般是一块独立的电路板,插在主板上接收由主机发出的控制显示系统工作的指令和显示内容的数字信号,然后通过输出模拟(或数字)信号控制显示器显示各种字符和图形,它和显示 ...