惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
罗磊的独立博客
雷峰网
雷峰网
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
B
Blog RSS Feed
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
D
Docker
Recent Announcements
Recent Announcements
T
Tailwind CSS Blog
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Vercel News
Vercel News
小众软件
小众软件
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
S
SegmentFault 最新的问题

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
MySQL LOAD DATA LOCAL INFILE 极速数据加载
Yiwei Zhang · 2025-04-08 · via 又见苍岚

Mysql 数据库数据导入,如果数据量大的话会很耗时,可以通过 LOAD DATA LOCAL INFILE 实现高性能数据导入。

核心原理

LOAD DATA INFILE 是MySQL原生支持的批量数据加载方式,其性能优势体现在:

  • 绕过SQL解析器直接操作存储引擎
  • 减少事务日志写入次数
  • 自动禁用索引后再重建(建议大表先手动禁用索引)
  • 基于二进制协议传输数据

环境配置

服务端配置

修改 my.cnf 配置文件(路径参考:/etc/mysql/my.cnf

1
2
[mysqld]
local_infile = on # 启用本地文件加载功能

重启MySQL服务生效:

1
2
sudo systemctl restart mysql  # Ubuntu/Debian
sudo systemctl restart mysqld # CentOS/RHEL

客户端配置

Python连接器需要启用本地文件加载权限,allow_local_infileTrue

1
2
3
4
5
6
7
8
9
import mysql.connector

conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database",
allow_local_infile=True # 关键参数
)

代码示例

基础版(CSV文件导入)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pythonCopy Codedef bulk_load_csv(csv_path):
"""高性能CSV数据导入"""
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database",
allow_local_infile=True
)
cursor = conn.cursor()

load_sql = f"""
LOAD DATA LOCAL INFILE '{csv_path}'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\\n'
IGNORE 1 LINES
(id, name, age)
"""

try:
cursor.execute(load_sql)
conn.commit()
print(f"成功导入 {cursor.rowcount} 条数据")
except mysql.connector.Error as err:
print(f"导入失败: {err}")
finally:
cursor.close()
conn.close()

# 执行导入(测试10万行CSV)
bulk_load_csv('data.csv')

性能优化技巧

1
2
3
4
5
6
7
8
sqlCopy Code/* 执行前禁用索引 */
ALTER TABLE users DISABLE KEYS;

/* 执行后重建索引 */
ALTER TABLE users ENABLE KEYS;

/* 调整缓冲区大小(按需设置) */
SET GLOBAL bulk_insert_buffer_size = 1024 * 1024 * 256; -- 256MB

文章链接:
https://www.zywvvd.com/notes/coding/dataset/mysql/mysql-infile/mysql-infile/