您所在的位置:首页 > 新闻中心 > data导入文件数据出现1290错误,Windows下MYSQL读取文件为NULL
公司要闻
data导入文件数据出现1290错误,Windows下MYSQL读取文件为NULL
发布时间:2020-03-18 22:40
访问量:359

错误出现情景

  在cmd中使用mysql命令,学生信息表添加数据。使用load data方式简单批量导入数据。

  准备好文本数据: xueshengxinxi.txt 文件  数据之间以tab键进行分割

  执行 “load data infile 文本数据路径  into table tab_load_data”  弹出错误。

澳门新濠登录网址 1澳门新濠登录网址 2

#load data (载入数据)语法,要载入数据如下:
    1    张三            男        江西    1
    2    李四            男        四川    2
    3    王五            男        上海    1
    4    赵六            女        湖北    3
    5    孙七            女        湖北    3
    6    周八            男        湖南    1    

#测试数据表
    create table tab_load_data (
        id int auto_increment primary key,
        name varchar(10),
        sex enum('男','女'),
        native varchar(10),
        f5 int
    );    

【点击查看】测试数据Demo

 

只记录解决问题的方法。

错误描述

  使用load data 导入文件数据总是弹出错误(Error 1290.....)如下:

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

    澳门新濠登录网址 3

mysql 版本: 5.7.18

解决思路(过程)

  1) 既然错误提示说明运行了secure-file-priv这个选项,不能执行load服务,那就找到MYSQL的配置文件"my.ini" 中该配置项。

  2) 配置前,先关闭mysql服务

  3) 打开my.ini,搜索关键字“secure-file-priv”找到这个选项后,直接注释掉这个选项,保存后,启动MYSQL服务

      澳门新濠登录网址 4

  4) 结果还是一样的错误。说明注释没有效果。这是怎么回事了?

    执行命令 “show variables like '%secure%'”发现原来我注释掉后,secure-file-priv的值为NULL说明禁止导入导出。        

    这说明注释掉是不行的。不删配置文件条目,那只好修改目录好了。

  5)修改路径,执行命令 “show variables like '%secure%'” 查看 , 重启MYSQL。

    澳门新濠登录网址 5
    澳门新濠登录网址 6

  6)再执行load data, 执行成功

  澳门新濠登录网址 7

  更复杂的load用法可以查看mysql手册。 到此,该问题解决。

问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段。如:

三, 小结说明

  从本错误中吸取:

  1) load data : 可以从一个外部的记事本文件中导入数据到某个表中。

    该记事本中的数据通常要求“比较整齐”,一行文本对应一行数据,一行中用某种字符(如用tab符)来分割一个一个字段的值

  2) secure-file-priv这个参数用来限制数据导入和导出操作的效果。

    如:执行LOAD,SELECT...INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要file权限。

  3)如果 secure-file-priv这个参数设为一个目录名,MYSQL服务只允许这个目录中执行文件的导入和导出操作。

    这个目录必须存在,MYSQL服务不会创建它。

  4) 如果secure-file-priv这个参数为NULL,MYSQL服务会禁止导入和导出操作。

 

 

 

 SELECT LOAD_FILE("D:\aa.txt");

但是执行时总是返回为空。各种斜线都尝试了。

 

经过查阅资料得:

mysql 新版本下secure-file-priv字段 : secure-file-priv参数是用来限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()传到哪个指定目录的。

  • ure_file_priv的值为null ,表示限制mysqld 不允许导入|导出

  • 当secure_澳门新濠登录网址,file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下

  • 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

如何查看secure-file-priv参数的值:

 

1
show global variables like '%secure%';

澳门新濠登录网址 8

默认的为NULL。即不允许导入导出。

修改mysql.ini 文件,在[mysqld] 下加入

secure_file_priv =

保存,重启mysql。

执行命令查看:

澳门新濠登录网址 9

 

再次执行loadfile:

澳门新濠登录网址 10

问题解决。

~~~~~