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

news2024/11/13 9:47:16

文章目录

  • 使用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)

使用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/656417.html

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

相关文章

linux_centos7.9/ubuntu20.04_下载镜像及百度网盘分享链接

1、镜像下载站点 网易开源镜像:http://mirrors.163.com/ 搜狐开源镜像:http://mirrors.sohu.com/ 阿里开源镜像:https://developer.aliyun.com/mirror/ 首都在线科技股份有限公司:http://mirrors.yun-idc.com/ 常州贝特康姆软件技…

TFTP是什么,一文带你了解

目录 一、TFTP协议简介 TFTP协议的主要特点包括: 二、TFTP包格式 1. 读/写请求包 2. 文件数据包 3. 回应包 4. 错误信息包 三、TFTP的工作流程 TFTP协议的工作流程包括以下几个步骤: 四、TFTP的传输模式 1. 二进制传输模式 2. ASCII码传输模式…

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

目录 一、Spring 简介二、读取配置文件、创建对象三、使用 Spring(1) 依赖(2) Spring 的核心配置文件(3) 获取 Spring IoC 工厂中的对象实例 四、IoC 容器五、依赖注入(DI)(1) 基于 setter 注入【bean】(2) 基于 setter 注入【基本类型、包装类型、Strin…

理解空穴电流

理解空穴电流 近日闲来无事,翻起来模电看了起来,在看到关于三极管的一张图时,对三极管的 I E P {I}_{EP} IEP​电流无法理解。 I E P {I}_{EP} IEP​电流,教材上的解释是基区空穴形成的空穴电流。 于是我就收集了相关资料&#…

NVIDIA Jetson Orin™ 与其他 NVIDIA Jetson 模组的区别

NVIDIA Jetson Orin™ 与其他 NVIDIA Jetson 模组的区别 在本系列关于 NVIDIA Jetson AGX Orin 的前几版中,我们了解了 AGX Orin 是什么、它的技术特性、主要构建模块和关键的嵌入式视觉用例。以下是这两篇文章的链接: 什么是 NVIDIA Orin 系列&#xf…

3D线段SFM建图

文章:3D Line Mapping Revisited 作者:Shaohui Liu,Yifan Yu,Remi Pautrat ,Marc Pollefeys,Viktor Larsson 编辑:点云PCL 代码: https://github.com/cvg/limap(CVPR 20…

Visual Studio无法拖入文件解决办法

原因:当windows账户为个人账户(即使带有管理员字眼),如果vs以“管理员”运行就会限制文件拖入,此时软件左上角显示“管理员”字眼 这种情况可能是你在运行vs时选了“以管理员身份运行”,也可能是快捷方式设…

深入理解Java虚拟机jvm-对象的访问定位

对象的访问定位 句柄直接指针优劣句柄直接指针 创建对象自然是为了后续使用该对象,我们的Java程序会通过栈上的reference数据来操作堆上的具 体对象。由于reference类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用,并没有定义这个引用应该通…

蓝牙技术原理(9)蓝牙AOA/AOD技术原理

文章目录 1 AOA/AOD的概述1.1 AOA(达到角)1.2 AOD(出发角) 2 AOA整体系统搭建3 IQ信号讲解3.1 阵列天线的切换模型3.2 CTE 数据包特征3.3 CTE 数据包具体格式3.4 相位角的计算 4 到达角度的计算5 确定tag的坐标 1 AOA/AOD的概述 BLE 5.1 有个特性加入了…

docker系列4:docker容器基本命令

传送门 前面介绍了docker的安装:docker系列1:docker安装 还有docker镜像加速器:docker系列2:阿里云镜像加速器 以及docker的基本操作: docker系列3:docker镜像基本命令 引子 从今年3月到现在&#xff…

OpenGL模型加载

1.模型加载库 Assimp库能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。 当使用Assimp导入一个模型的时候,它通常会将整个模型加载进一个场景(Scene)对象&#x…

什么是EBNF?并举例介绍

EBNF(Extended Backus-Naur Form)是一种扩展的Backus-Naur形式,是一种用于描述上下文无关文法(CFG)的元语言。 EBNF用于定义编程语言、数据格式和其他形式的语法。它使用一些扩展的符号来描述语法规则,包括…

.Net Core 2.2 升级到 .Net Core 3.1

微软在更新.Net Core版本的时候,动作往往很大,使得每次更新版本的时候都得小心翼翼,坑实在是太多。往往是悄咪咪的移除了某项功能或者组件,或者不在支持XX方法,这就很花时间去找回需要的东西了,下面是个人在…

基于Python的点赞、收藏博客

文章目录 前言一、点赞和取消点赞1.请求url和请求方法2.入参3.响应结果3.1点赞3.2取消点赞 4.代码5.效果 二、收藏2.1判断博客是否收藏过2.1.1请求url和请求方法2.1.2响应结果未收藏已收藏 2.1.3代码2.1.4效果 2.2收藏博客2.2.1请求url和请求方法2.2.2入参2.2.3响应结果2.2.4代…

爬虫小白应该如何学习爬虫

什么是Python3网络爬虫? 定义: 网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。爬虫其实是通过编写程序,模拟浏览器上网&#x…

高频面试题/面试经常被问到怎么处理接口依赖该怎么回答

前言 由于快到金九银十了,笔者最近呢发的都是一些有关面试方面的文章,有需要的小伙伴可以看看笔者的文章希望可以帮助到大家,今天呢笔者想和大家来聊聊在面试中被问到怎么处理接口依赖改怎么回答,废话就不多说了咱们直接进入主题…

互斥锁实现线程互斥(嵌入式学习)

互斥锁实现线程互斥 互斥锁的概念互斥锁的函数示例代码 互斥锁的概念 互斥锁(Mutex)是一种用于多线程编程的同步原语(synchronization primitive),用于实现线程之间的互斥访问共享资源。互斥锁提供了一种机制&#xff…

限流式保护器在高校中的应用

安科瑞虞佳豪 4月10日下午1点50多分 浙大紫金港校区边一活动板房发生火情。起火位置为浙大紫金港校区的动物保护基地。 “起火的地方是有一个学生动物保护者协会,里面有一些学生救助的猫、狗等小动物。”一位学校的学生告诉潮新闻记者。 随后,潮新闻…

C语言(14) 谈谈嵌入式 C 语言踩内存问题!

1 概述 C 语言内存问题,难在于定位,定位到了就好解决了。 这篇笔记我们来聊聊踩内存。踩内存,通过字面理解即可。本来是操作这一块内存,因为设计失误操作到了相邻内存,篡改了相邻内存的数据。 踩内存,轻则…

Shopify股价在暴涨了78%以后,还值得投资吗?

来源:猛兽财经 作者:猛兽财经 今年以来Shopify (SHOP)的股价一直在上涨,迄今为止的涨幅已经超过了78%,并且远远跑赢了美股的所有主要指数。 猛兽财经认为,Shopify的股价之所以能在今年上涨,主要受到以下几…