【MySQL】使用LOAD DATA INFILE命令加载数据文件到MySQL数据库的方法和常见错误及解决方法

news2024/11/18 3:41:53

文章目录

  • 【MySQL】使用LOAD DATA INFILE命令加载数据文件到MySQL数据库的方法和常见错误及解决方法
    • LOAD DATA INFILE的语法详细
    • 1.创建(选择)目标数据库和表
    • 2.将数据从 CSV 文件导入已创建的表
    • 常见错误和解决方法
      • 错误1:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
        • 原因
        • 解决方法
        • 关于secure_file_priv参数
          • 查看secure_file_priv参数设置
          • 修改secure_file_priv参数
      • 错误2:ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
        • 原因
        • 解决方法
        • 关于local_infile参数

【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)

【MySQL】使用LOAD DATA INFILE命令加载数据文件到MySQL数据库的方法和常见错误及解决方法

在MySQL数据库中,可以使用LOAD DATA INFILE命令将数据从 CSV 文件导入已创建的表中。

LOAD DATA INFILE的语法详细

LOAD DATA INFILE的语法详细如下:

LOAD DATA
    [LOW_PRIORITY | CONCURRENT] [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT}
        [, col_name={expr | DEFAULT}] ...]

参考:
3.3.3 Loading Data into a Table
https://dev.mysql.com/doc/refman/8.0/en/load-data.html

6.1.6 Security Considerations for LOAD DATA LOCAL
https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html

具体步骤如下。

1.创建(选择)目标数据库和表

创建测试数据库testdb和相关的表

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
+--------------------+
5 rows in set (0.05 sec)

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.10 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| testdb             |
+--------------------+
6 rows in set (0.00 sec)

mysql> use testdb;
Database changed
mysql> CREATE TABLE Student (
    -> id INT PRIMARY KEY,
    -> name VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.35 sec)

2.将数据从 CSV 文件导入已创建的表

LOAD DATA INFILE 'students.csv'
INTO TABLE student
FIELDS TERMINATED BY ',' -- 字段分隔符
ENCLOSED BY '"' -- 字段使用的引号
ESCAPED BY '\\' -- 转义符
LINES TERMINATED BY '\n' -- 行分隔符
IGNORE 1 ROWS; -- 忽略 CSV 文件第一行(表头)

执行例:

mysql>  show variables like 'secure_file_priv';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | F:\   |
+------------------+-------+
1 row in set, 1 warning (0.00 sec)

mysql> LOAD DATA INFILE 'F:\\students.csv'
    -> INTO TABLE student
    -> FIELDS TERMINATED BY ',' -- 字段分隔符
    -> ENCLOSED BY '"' -- 字段使用的引号
    -> ESCAPED BY '\\' -- 转义符
    -> LINES TERMINATED BY '\n' -- 行分隔符
    -> IGNORE 1 ROWS; -- 忽略 CSV 文件第一行(表头)
Query OK, 100 rows affected (0.09 sec)
Records: 100  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|      100 |
+----------+
1 row in set (0.00 sec)

常见错误和解决方法

错误1:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

在将数据加载到MySQL数据库时发生如下错误。

mysql> LOAD DATA INFILE 'students.csv'
    -> INTO TABLE student
    -> FIELDS TERMINATED BY ',' -- 字段分隔符
    -> ENCLOSED BY '"' -- 字段使用的引号
    -> ESCAPED BY '\\' -- 转义符
    -> LINES TERMINATED BY '\n' -- 行分隔符
    -> IGNORE 1 ROWS; -- 忽略 CSV 文件第一行(表头)
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql>

原因

这个错误表示由于 MySQL中 --secure-file-priv 选项的设置,限制了用户从本地文件系统加载数据到服务器中。

解决方法

修改secure_file_priv参数为文件所在目录 或者 指定为空。

关于secure_file_priv参数

secure_file_priv是一个MySQL 全局(Global)系统变量,用于限制数据导入和导出操作,例如LOAD DATA和SELECT … INTO OUTFILE语句以及LOAD_FILE()函数的操作。只有拥有FILE权限的用户才能执行这些操作。

secure_file_priv的设置包括三种情况:

 - 如果为空(secure-file-priv=“”),表示没有任何限制。这不是一个安全的设置。
 - 如果设置为目录的名称,表示服务器限制导入和导出操作仅使用该目录中的文件。服务器不会创建该目录,所以必须为存在的路径。
 - 如果设置为NULL(secure-file-priv=null),表示服务器禁用导入和导出操作。

secure_file_priv的默认值根据安装的平台有所不同。

secure_file_priv参数内容如下:

Command-Line Format–secure-file-priv=dir_name
System Variablesecure_file_priv
ScopeGlobal
DynamicNo
SET_VAR Hint AppliesNo
TypeString
Default Valueplatform specific
Valid Valuesempty string, dirname, NULL

参考:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_secure_file_priv

查看secure_file_priv参数设置

可以通过以下命令查看 secure_file_priv 的当前设置值:

SHOW VARIABLES LIKE 'secure_file_priv';

例:

mysql> show variables like 'secure_file_priv';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | F:\   |
+------------------+-------+
1 row in set, 1 warning (0.00 sec)
修改secure_file_priv参数

因为secure_file_priv是一个非持久化只读变量,不能通过SET命令进行修改。
所以需要在MySQL配置文件my.cnf (Mac, Linux) 或者 my.ini (Windows) 中设置secure-file-priv参数。具体操作方法如下:

打开MySQL配置文件my.cnf或my.ini。
添加或修改secure-file-priv参数,例如:secure-file-priv=/var/lib/mysql-files。
保存并关闭文件。
重启MySQL服务器,使配置生效。
	net stop mysql
	net start mysql

例:(Windows)
在这里插入图片描述
注意:确保设置的路径存在,并且MySQL用户有访问该路径的权限。
如果secure_file_priv设置不正确,可能导致MySQL进程启动失败。

错误2:ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.

使用 LOAD DATA LOCAL INFILE,从客户端加载数据到数据库的时候,可能发生如下错误。

--服务器端未启动LOAD DATA LOCAL INFILE功能
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
--客户端未启动LOAD DATA LOCAL INFILE功能
ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.

例:

mysql>  LOAD DATA LOCAL INFILE 'F:\\students.csv'
    ->  INTO TABLE student
    ->  FIELDS TERMINATED BY ',' -- 字段分隔符
    ->  ENCLOSED BY '"' -- 字段使用的引号
    ->  ESCAPED BY '\\' -- 转义符
    ->  LINES TERMINATED BY '\n' -- 行分隔符
    ->  IGNORE 1 ROWS;
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
mysql>

原因

这个错误是因为默认情况下,MySQL服务器禁止使用LOAD DATA LOCAL INFILE命令从客户端读取本地文件。

解决方法

1.服务器端设置local_infile,启用LOAD DATA LOCAL INFILE功能。

修改local_infile为启用。
例:

mysql> show variables like 'local%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+
1 row in set, 1 warning (0.02 sec)

mysql> set global  local_infile = 'ON';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'local%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)

2.客户端在连接MySQL服务器时添加–local-infile选项,启用LOAD DATA LOCAL INFILE功能。

例:
C:\Users\Administrator> mysql --local-infile=1 -u root -p
mysql> use testdb
Database changed
mysql>  LOAD DATA LOCAL INFILE 'F:\\students.csv'
    ->  INTO TABLE student
    ->  FIELDS TERMINATED BY ',' -- 字段分隔符
    ->  ENCLOSED BY '"' -- 字段使用的引号
    ->  ESCAPED BY '\\' -- 转义符
    ->  LINES TERMINATED BY '\n' -- 行分隔符
    ->  IGNORE 1 ROWS;
Query OK, 0 rows affected, 100 warnings (0.08 sec)
Records: 100  Deleted: 0  Skipped: 100  Warnings: 100

mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|      100 |
+----------+
1 row in set (0.05 sec)

关于local_infile参数

local_infile参数是一个MySQL系统变量,用于控制服务器端LOAD DATA语句的LOCAL功能。
根据local_infile设置,服务器会拒绝或允许启用客户端LOCAL功能的客户端加载本地数据。

Command-Line Format–local-infile
System Variablelocal_infile
ScopeGlobal
DynamicYes
SET_VAR Hint AppliesNo
TypeBoolean
Default ValueOFF

注意:local_infile参数可以动态修改。

参考:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile

6.1.6 Security Considerations for LOAD DATA LOCAL
https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能 ---搜索算法

(一)Dijkstra-Prim 算法和 Kruskal 算法 Dijkstra-Prim算法基本思路:所有节点分成两个group,一个为已经选取的selected_node(为list类型),一个为candidate_node,首先任取一个节点加入…

以太网通信的回环测试

PHY 芯片通常带有回环(Loopback)功能,用于 PHY 通信链路的测试。本文主要讨论三种常用 PHY 芯片的回环功能,并使用 Broadcom 的 B50612D 芯片进行 PHY 回环测试。 1 常见PHY芯片的回环功能 1.1 KSZ9031 KSZ9031 芯片支持以下两种…

坚鹏:中国农业银行BLM银行数字化转型战略培训在北京大学举办

中国农业银行BLM银行数字化转型战略培训班在北京大学顺利举办 中国农业银行成立于1951年,国家副部级单位。中国农业银行是中国金融体系的重要组成部分,提供各种公司银行、零售银行产品和服务,同时开展金融市场业务及资产管理业务&#xff0c…

Python中常见的10个高级特性解析

目录 1. 什么是Python中的装饰器?如何使用装饰器?2. 什么是Python中的迭代器和生成器?它们有什么区别?3. Python中的GIL是什么?它如何影响多线程应用程序?4. 什么是Python中的元类?如何使用元类…

小鱼C python - 集合的练习(去重、解密)

题一:用字典实现集合的去重特性 1. 生成100个1~100的随机值 思路: 1. range 范围 2. random.randint(a,b) import random x [] for I in range(100):x.append(random.randint(1,100)) print(x) 2. x和y的交集 思路:1.遍历x,…

Java经典面试题包含答案

文章目录 1.Java语言有哪些特点?2.面向对象和面向过程的区别?3.八种数据类型大小、封装类4.instanceof关键字的作用5.Java自动装箱与拆箱6. 重载与重写的区别7. 与 equals的区别8.hashCode的作用9. JVM vs JDK vs JRE10.什么是字节码?采用字节码的好处…

【MySql】RR 与 RC的本质区别

文章目录 当前读与快照读两个场景RR 与 RC的本质区别 本篇博客介绍的是RR与RC的本质区别,话不读说,直接进入主题即可。 当前读与快照读 select * from user lock in share mode ,以加共享锁方式进行读取,对应的就是当前读 不加lock in share…

【EXCEL】快速填充数据,批量提取与组合数据

目录 0.环境 1.简要介绍功能 2.具体实际应用 1)提取括号中的内容 2)拆分重组--重组“姓”和“职位” 3)数据拆分 0.环境 windows office2021 注意:此功能可能需excel 2013版本及以上使用 1.简要介绍功能 在excel中&#xf…

flink datastream api实现数据实时写入hudi

Apache Hudi(发音为“hoodie”)是下一代流数据湖平台。 Apache Hudi 将核心仓库和数据库功能直接引入数据湖。 Hudi 提供表、事务、高效的更新插入/删除、高级索引、流式摄取服务、数据集群/压缩优化和并发性,同时将您的数据保持为开源文件格…

项目经理一直盲目跟风的PMP认证,到底还剩多少含金量?

早上好,我是老原。 到底有没有必要考证? 到底考啥证? PMP?软考?还是NPDP? …… 这是老原的粉丝们亘古不变的话题。 我这有不少朋友就是这样,前两年就在问我要不要考证,直到现在…

为什么你的手机号需要二次实名,这几个原因你想过没有?

尊敬的客户:您的手机卡存在安全风险,为保护您的权益,您的电话呼出、短信和流量使用功能被限制。请机主本人使用被保护的手机号码登录网页链接 进行实名核验,核验通过后,将自动恢复正常通信服务。如核验未通过&#xff…

vite构建工具初识

一、什么是vite vite官网地址:https://cn.vitejs.dev/ Vite 是一个由 Vue.js 作者尤雨溪开发的新一代前端构建工具,它相比于传统的 webpack,具有更快的启动速度、更高的开发效率和更简洁的配置方式。 Vite的主要特点包括: 快速…

2023年上海/广州/深圳DAMA-CDGA/CDGP数据治理认证班

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

Java 设计模式实战系列—策略模式

从优惠打折活动说起 电商平台为了增加销量经常搞一些活动,比如 618、双十一,还有一些节假日活动,根据销量的变化又经常更新不同的活动。最开始为了增加销量,全场都六折: // 打六折 public BigDecimal sixDiscount(Bi…

Spring Cloud 之注册中心 Eureka 精讲

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

【单周期CPU】LoongArch | 立即数扩展模块Ext | 32位算术逻辑运算单元(ALU)

前言:本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本组合逻辑部件的设计。 💻环境:一台内存4GB以上,装有64位Windows操作系统和Vivado 201…

HarmonyOS学习路之开发篇—AI功能开发(文档检测校正)

基本概念 文档校正提供了文档翻拍过程的辅助增强功能,包含两个子功能: 文档检测:能够自动识别图片中的文档,返回文档在原图中的位置信息。这里的文档泛指外形方正的事物,比如书本、相片、画框等。文档校正&#xff1a…

java中如何实现字符串反转

java中如何实现字符串反转 方式1:通过创建StringBuilder或StringBuffer对象,并使用其reverse()方法实现字符串的反转 上代码: /*** 给定一个字符串,通过创建SpringBuilder对象的方式将字符串进行反转* return*/public static …

cadence从原理图到pcb

完成原理图设计后,需要进行如下步骤才能开始画PCB: 原理图规制检测(DRC)生成网表新建PCB文件,设置封装路径导入网表设置原点和栅格绘制PCB板框将器件导入PCB 原理图规制检测(DRC) 选中原理图文件,运行Tools->Design Rules C…

synchronized锁升级详细过程

目录 一、锁升级基础 1)偏向锁 2)轻量级锁(自旋锁) 3)重量级锁 二、为什么要有锁升级过程? 1)减少无竞争情况下的同步操作开销 2)尽量避免线程切换的开销 3)降低…