一、准备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文件并映射字段,适合不熟悉命令行的用户。