IP到国家代码映射之GeoLite2导入到MySQL形成数据字典

一、准备CSV文件与MySQL表结构‌

  1. ‌下载并解压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‌

  1. ‌使用 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"}

  1. ‌参数说明‌

    LOCAL:从客户端本地路径读取文件(需开启MySQL的local_infile参数);

    FIELDS TERMINATED BY ',':字段分隔符为逗号;

    ENCLOSED BY '"':字段值用双引号包围;

    LINES TERMINATED BY '\n':行终止符为换行符(Windows生成文件需改为\r\n);

    IGNORE 1 ROWS:忽略CSV文件的标题行。

    三、常见问题处理‌

  2. ‌字符编码冲突‌

    若导入时出现乱码,在LOAD DATA语句中指定字符集:

    sql

    Copy Code

    LOAD DATA ... CHARACTER SET utf8mb4 ... ; -- 指定编码为UTF-8:ml-citation

  3. ‌权限不足或文件路径错误‌

    确保MySQL用户有文件读取权限,并使用绝对路径:

    sql

    Copy Code

    SHOW VARIABLES LIKE 'secure_file_priv'; -- 查看允许导入的目录:ml-citation

  4. ‌重复数据冲突‌

    使用REPLACE或IGNORE关键词处理主键冲突:

    sql

    Copy Code

    LOAD DATA ... REPLACE ... ; -- 覆盖重复记录:ml-citation

四、验证导入结果‌

  1. ‌检查数据量是否匹配‌

    sql

    Copy Code

    SELECT COUNT(*) FROM geoip_country_blocks; -- 对比CSV行数(排除标题行):ml-citation

  2. ‌抽样查询示例‌

    sql

    Copy Code

    SELECT * FROM geoip_country_locations

    WHERE country_iso_code = 'CN'; -- 查找中国数据:ml-citation

五、图形化工具备选方案(如Navicat)‌

右击目标表选择"导入向导",指定CSV文件并映射字段,适合不熟悉命令行的用户。

相关推荐
Database_Cool_7 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
Database_Cool_8 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白8 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
liuxiaowei310 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
sg_knight12 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
Database_Cool_14 小时前
企业级多模态分析计算引擎选型:首选 AnalyticDB MySQL 向量 + SQL + 实时一体化方案
数据库·sql·mysql
宇宙第一小趴菜15 小时前
五、Oracle vs MySQL 架构深度对比笔记
mysql·oracle·架构
Database_Cool_17 小时前
云数据仓库开通指南:阿里云 AnalyticDB MySQL 10 分钟从 0 到分析实战教程
数据仓库·mysql·阿里云
—Miss. Z—20 小时前
计算机二级MySQL——简单应用题(事件&视图)
android·mysql·adb
会编程的土豆20 小时前
MySQL 中的 IN 和 EXISTS(零基础笔记)
数据库·笔记·mysql