【MySQL】导入 JSONL 数据到 MySQL数据库

本文讲述了如何在MySQL5.7及以上版本中使用LOADDATAINFILE命令从.jsonl文件导入数据,包括设置`secure_file_priv`参数、处理JSON特殊字符编码问题以及配置文件导入路径等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一些数据处理工作需要将后缀为“.jsonl”的文件数据导入到 MySQL 库。由于之前没有尝试过,这次就当作经验记录一下。

首先肯定是要先建库和建表(这些就不再细说了),接着就可以通过 LOAD DATA INFILE 命令将 jsonl 文件内容进行提取。由于这次使用的是 MySQL 5.7 以上的版本(MySQL 8),因此直接使用@json 用户变量告诉 MySQL 要将数据以 JSON 格式进行存储就可以了。如下图:

LOAD DATA INFILE '<<jsonl_path>>'  
INTO TABLE <<target_table>>  
(@json)  
SET field1 = JSON_EXTRACT(@json, '$.field1'),  
    field2 = JSON_EXTRACT(@json, '$.field2'),  
    field3 = JSON_EXTRACT(@json, '$.field3'),
    ...;

但是在这个过程中或许会出现 “secure-file-priv” 参数异常,如下图:

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

这个时候就可以通过 “show variables like ‘secure_file_priv’” 查询一下当前参数状态

mysql> show variables like 'secure_file_priv';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.00 sec)

Value 为 NULL 则表明禁止导入导出功能,这个时候需要对 my.cnf 文件进行一下配置,指定一个导入路径给它

# 这里的路径是 Docker 镜像内部的路径
secure_file_priv='/var/lib/mysql/imports'

然后重启 MySQL 服务。之后重新执行 “show variables like ‘secure_file_priv’” 看看配置是否生效。

mysql> show variables like 'secure_file_priv';
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| secure_file_priv | /var/lib/mysql/imports/ |
+------------------+-------------------------+
1 row in set (0.00 sec)

配置生效之后记得要将 /var/lib/mysql/imports/ 路径映射到宿主机,又或者使用 docker cp 将 jsonl 文件放入到容器内部,不然会报找不到文件的错误。
在导入的过程中或许还会出现:

Error Code: 3141. Invalid JSON text in argument 1 to function json_extract: "Invalid encoding in string." at position 411.

这是因为 jsonl 中出现了特殊字符引起的,我这次遇到的就是“\”的问题。由于数据中有可能会出现字符转义的情况,因此那些“\n”、“\t”、“\”等等都需要先进行特殊字符的转换,不然无法导入到数据库中。譬如,在 jsonl 文件中将“\n”先全部替换成“@”,“\t”全部替换成“&”,在导入到数据库之后再重新更新回来就可以了。

将服务器的命令行数据抓取并导入MySQL,通常需要通过编程或者脚本来实现自动化处理。这里是一个基本步骤: 1. **数据收集**: - 使用系统编程语言(如Python的`subprocess`模块、bash shell script等)运行服务器命令行,并捕获其输出。例如,如果你想要获取`ls -l`命令的结果,你可以创建一个shell脚本或Python程序来执行该命令并保存结果。 ```python import subprocess output = subprocess.check_output(['ls', '-l']) ``` 2. **解析数据**: - 数据可能包含结构化的文本,比如CSV、JSON,也可能只是普通的文本。你需要将其解析成可以插入数据库的格式。 3. **数据转换**: - 将解析后的数据转化为MySQL支持的数据类型,如果需要的话,可能还需要清洗或标准化数据。 4. **连接MySQL**: - 使用Python的`pymysql`、`mysql-connector-python`或其他相应的库连接到MySQL数据库。 5. **插入数据**: - 执行SQL INSERT语句,将数据逐条插入表中。 ```python import pymysql # 创建连接 conn = pymysql.connect(host='localhost', user='username', password='password', db='database') try: with conn.cursor() as cursor: for line in output.decode('utf-8').split('\n'): # 假设每一行都是独立的数据 if not line.strip(): # 跳过空行 continue # 根据实际数据格式构造SQL插入语句并执行 cursor.execute(f"INSERT INTO your_table (column1, column2) VALUES ({line.split(',')})") conn.commit() finally: conn.close() ``` 6. **错误处理**: - 需要处理可能出现的网络错误、权限问题或SQL执行失败等情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kida 的技术小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值