MYSQL8.0中关于load data infile命令

提醒:遇到软件不同版本时,参考文档才是最佳的学习资料。

在学习mysql注入时认识了 LOAD DATA INFILE 语句。在注入时我们会需要一些特殊的文件,如配置文件,密码文件等。当拥有数据库权限时,可以将系统文件利用 load data infile 导入数据库中。
根据官方文档,了解该语句语法:

LOAD XML[LOW_PRIORITY | CONCURRENT] [LOCAL]INFILE 'file_name'[REPLACE | IGNORE]INTO TABLE [db_name.]tbl_name[CHARACTER SET charset_name][ROWS IDENTIFIED BY '<tagname>'][IGNORE number {LINES | ROWS}][(field_name_or_user_var[, field_name_or_user_var] ...)][SET col_name={expr | DEFAULT}[, col_name={expr | DEFAULT}] ...]

首先我建了一个这样的表:

然后我意图将这个文档的内容插入表中

首先查看local_infile,将其开启为ON。

mysql >set global local_infile=1;
mysql> show global variables like 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+

但是出现报错,通过参考文档发现高版本mysql将本地数据加载操作限制在了指定文档中。

//找到指定文件夹
mysql> show variables like '%secure%';
+--------------------------+------------------------------------------------+
| Variable_name            | Value                                          |
+--------------------------+------------------------------------------------+
| require_secure_transport | OFF                                            |
| secure_file_priv         | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
+--------------------------+------------------------------------------------+
//也有root权限
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+//存在报错;
mysql> load data local infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\2.txt' into table test2 fields terminated by '\n';
ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.

发现 local 删掉就不会报错了?

LOCAL:
该关键字影响文件的预期读取位置及错误句柄。需要客户端及服务端都开启该选项,如果mysqld的启动参数包含local-infile=0,那么指定该参数是无效的。
使用时,客户端程序读取文件并将其内容发送到服务器。服务器在存储临时文件的目录中创建文件的副本,如果此目录中缺少足够的空间来存储副本,则也可能导致 LOAD DATA LOCAL 语句失败。

mysql> load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\2.txt' into table test2 fields terminated by '\n';
Query OK, 4 rows affected (0.00 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0//这样也可以
mysql> load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\2.txt' ignore into table test2 character set gbk fields terminated by '\t' lines terminated by '\n';
//将 2.txt 导入到 test2 表中,character set gbk 是字符集设置为 gbk,fields terminated by 是每一项数据之间的分隔符,lines terminated by 是行的结尾符。
Query OK, 4 rows affected (0.00 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0

随后我添加了环境变量,从cmd中进入mysql,成功使用 load data local infile 语句。



还要注意:
表中字段的类型要与输入数据类型对应,即为varchar即字符串类型,才能写进去;
查看 secure_file_priv 属性设置是否正确;
高版本的mysql如果是空值应该要写NULL或者0,否则会报错 Incorrect integer value: ” for column ‘id’ at row 1,但是这里只设置了一列因而不会有这个错;
在windows下, 路径可以为斜杠 ‘/’ 或双反斜杠 ‘\\’ 。

官方文档中也提到了安全要求:
对于非加载操作,服务器读取位于服务器主机上的文本文件,因此必须满足以下安全要求:
必须具有 FILE 权限,该操作受 secure_file_priv 系统变量设置的约束:

  • 如果变量值是非空目录名,则文件必须位于该目录中。
  • 如果变量值为空(不安全),则服务器只需读取该文件。

对于装入操作,客户端程序读取位于客户端主机上的文本文件。由于文件内容是通过客户端与服务器的连接发送的,因此使用速度比服务器直接访问文件时慢一些。另一方面,您不需要 FILE 特权,并且该文件可以位于客户端程序可以访问的任何目录中。

MYSQL8.0中关于load data infile命令相关推荐

  1. MySQL讲义第 37 讲——LOAD DATA INFILE 命令

    MySQL讲义第 37 讲--LOAD DATA INFILE 命令 文章目录 MySQL讲义第 37 讲--LOAD DATA INFILE 命令 一.LOAD DATA INFILE 命令的格式 ...

  2. mysql load data infile 重写_mysql load data infile 命令的数据导入

    文章介绍了mysql load data infile 命令的数据导入,该方式比直接的insert的效率要高,按照官方的说法是要比insert语句快上20倍,有需要的朋友可参考. 使用方式如下: 代码 ...

  3. mysql导入数据load data infile用法整理

    有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. ...

  4. LOAD DATA INFILE 语法

    原文地址:http://blog.sina.com.cn/s/blog_539f03f00100xfxb.html mysql 的LOAD DATA INFILE 是一个高速insert的不错的方案 ...

  5. MySQL使用INTO OUTFILE和LOAD DATA INFILE导出导入百万级数据文件

    MySQL数据库的备份与恢复(1)--使用Select Into Outfile和Load Data Infile命令 MySQL使用SELECT-INTO OUTFILE导出文本文件 MySQL中, ...

  6. mysql in 文本_MySQL_mysql 的load data infile,LOAD DATA INFILE语句从一个文本文 - phpStudy...

    mysql 的load data infile LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.如果指定LOCAL关键词,从客户主机读文件.如果LOCAL没指定,文件必须 ...

  7. mysql.data已拥有为,MYSQL LOAD DATA INFILE忽略重复行(自动增量作为主键)

    我使用LOAD DATA INFILE命令遇到了一些麻烦,因为我想忽略已经在数据库中的行-如果我有一个包含数据的表,如下所示, id |name |age -------------------- 1 ...

  8. Linux系统下MySQL的导入数据的命令语句Load Data InFile的用法详解

    文章目录 语法格式 LOW_PRIORITY CONCURRENT LOCAL REPLACE 或 IGNORE PARTITION CHARACTER SET 对导入文件的字段进行格式描述 指定行的 ...

  9. python里load什么意思_如何从python中执行LOAD DATA命令

    我该怎么做?在import MySQLdb conn = MySQLdb.connect ( host = settings.DATABASES['default']['HOST'], port = ...

最新文章

  1. python代码计算图像的分辨率
  2. 基于K8S构建企业级Jenkins CI/CD平台实战(一) 之 环境搭建
  3. 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
  4. 报错 插入更新_自增主键,三类插入测验答案,在这里。
  5. 对现有的所能找到个DDOS代码(攻击模块)做出一次分析----TCP篇
  6. iis7配置php-7,PHP--Windows 7 +IIS7配置
  7. WinRAR 命令行简体中文说明
  8. 极宝贵的BAT后端面经(含答案)
  9. DevOps--Chef/Puppet
  10. 都挺好 苏大强C位出道的不只表情包 还有大眼袋
  11. 安卓10源码开发定制(29)手电筒控制源码分析
  12. matlab 卡丹 公式,一般三次方程谢国芳求根公式的推导方法2(基于卡丹公式的推导).doc...
  13. Pandas官方文档!(中文版PDF下载)
  14. Todesk远程连接时一直显示密码错误
  15. Python学习笔记(1)——提取百度新闻标题、网址、日期和来源
  16. java模拟登录百度_模拟登陆百度的Java实现
  17. 如何在5分钟内完成H5制作?
  18. 【安卓逆向】CTF实战分析
  19. 2022SDUT知到/智慧树----C语言第二章测试题解
  20. 阿里云自建私人网盘云盘

热门文章

  1. 终于刷完PAT乙级练习题
  2. ORACLE ---开窗函数
  3. python获取期权行情包括k线,tick,greeks分时等数据
  4. 7-4 计算圆柱体的体积
  5. MySQL 性能优化实战
  6. Docker入门笔记(七)——镜像
  7. “Command CodeSign failed with a nonzero exit code”解决方案
  8. 这应该是最通俗易懂的PyEcharts的操作指南!
  9. HarmonyOS + linkboy + 小熊派,能擦出怎样的火花?
  10. ArcGIS安装的关键步骤