MYSQL8.0中关于load data infile命令
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命令相关推荐
- MySQL讲义第 37 讲——LOAD DATA INFILE 命令
MySQL讲义第 37 讲--LOAD DATA INFILE 命令 文章目录 MySQL讲义第 37 讲--LOAD DATA INFILE 命令 一.LOAD DATA INFILE 命令的格式 ...
- mysql load data infile 重写_mysql load data infile 命令的数据导入
文章介绍了mysql load data infile 命令的数据导入,该方式比直接的insert的效率要高,按照官方的说法是要比insert语句快上20倍,有需要的朋友可参考. 使用方式如下: 代码 ...
- mysql导入数据load data infile用法整理
有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. ...
- LOAD DATA INFILE 语法
原文地址:http://blog.sina.com.cn/s/blog_539f03f00100xfxb.html mysql 的LOAD DATA INFILE 是一个高速insert的不错的方案 ...
- MySQL使用INTO OUTFILE和LOAD DATA INFILE导出导入百万级数据文件
MySQL数据库的备份与恢复(1)--使用Select Into Outfile和Load Data Infile命令 MySQL使用SELECT-INTO OUTFILE导出文本文件 MySQL中, ...
- mysql in 文本_MySQL_mysql 的load data infile,LOAD DATA INFILE语句从一个文本文 - phpStudy...
mysql 的load data infile LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.如果指定LOCAL关键词,从客户主机读文件.如果LOCAL没指定,文件必须 ...
- mysql.data已拥有为,MYSQL LOAD DATA INFILE忽略重复行(自动增量作为主键)
我使用LOAD DATA INFILE命令遇到了一些麻烦,因为我想忽略已经在数据库中的行-如果我有一个包含数据的表,如下所示, id |name |age -------------------- 1 ...
- Linux系统下MySQL的导入数据的命令语句Load Data InFile的用法详解
文章目录 语法格式 LOW_PRIORITY CONCURRENT LOCAL REPLACE 或 IGNORE PARTITION CHARACTER SET 对导入文件的字段进行格式描述 指定行的 ...
- python里load什么意思_如何从python中执行LOAD DATA命令
我该怎么做?在import MySQLdb conn = MySQLdb.connect ( host = settings.DATABASES['default']['HOST'], port = ...
最新文章
- python代码计算图像的分辨率
- 基于K8S构建企业级Jenkins CI/CD平台实战(一) 之 环境搭建
- 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
- 报错 插入更新_自增主键,三类插入测验答案,在这里。
- 对现有的所能找到个DDOS代码(攻击模块)做出一次分析----TCP篇
- iis7配置php-7,PHP--Windows 7 +IIS7配置
- WinRAR 命令行简体中文说明
- 极宝贵的BAT后端面经(含答案)
- DevOps--Chef/Puppet
- 都挺好 苏大强C位出道的不只表情包 还有大眼袋
- 安卓10源码开发定制(29)手电筒控制源码分析
- matlab 卡丹 公式,一般三次方程谢国芳求根公式的推导方法2(基于卡丹公式的推导).doc...
- Pandas官方文档!(中文版PDF下载)
- Todesk远程连接时一直显示密码错误
- Python学习笔记(1)——提取百度新闻标题、网址、日期和来源
- java模拟登录百度_模拟登陆百度的Java实现
- 如何在5分钟内完成H5制作?
- 【安卓逆向】CTF实战分析
- 2022SDUT知到/智慧树----C语言第二章测试题解
- 阿里云自建私人网盘云盘