以下暂时只针对Windows系统,并未在其他系统上面测试,欢迎大家测试!)

刚刚上午解决了Access Denied的问题,下午受上午解决问题的思路启发,结果很快就解决了关于MySQL8.0版本以上的文件单次导入权限问题!!!

相信大家都在初次导入外部文件到MySQL的适合遇到了这个问题吧:

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

然后大家也都搜索发现,普遍回答都是教大家去
my.ini(Windows系统)或者my.cnf(Mac系统)文件[mysqld]里面添加这行命令:“ secure_file_priv=’’ " 或者这么写 secure_file_priv=

然后重启MySQL服务是吧?(这个方法是有效的!!!
又或者添加了这个命令在my.ini文件,但是还是没生效, 于是又不断地谷歌百度,发现有的教大家去更改默认MySQL文件执行路径为my.ini文件所在位置,如下图:


第一种有效!以上两种方法可能对MySQL8.0版本以下地有效,第二种可能会产生其余问题,暂时不讲,空了补上。但是对我的MySQL8.0版本都无效!!!


(我是机智的分割线)

2020.05.21更新
啊啊啊啊!!!!今天突然发现了之前为啥怎么改my.ini文件,MySQL的文件导入权限命令都不生效的原因了!

原来是我在最后保存文件名的时候多写了三个字母。。。本来是my.ini ✔的配置文件,被我变成了my.ini.ini❌。。。正确文件格式应该就是下面这样:

保存后就是下面这样:

这次是真的永久更改MySQ导入外部文件的权限方法!
这次是真的永久更改MySQ导入外部文件的权限方法!
这次是真的永久更改MySQ导入外部文件的权限方法!
重要事情说三遍😂

还是先停止MySQL服务,再去下面添加导入路径即可,注意一下是双反斜杠:

,接着重启MySQL服务,再查看MySQL导入文件权限变量就可以发现已经成功更改了:


(我是机智的分割线)

2020.02.04更新
有朋友反应说下面的两个方无效,我今天又尝试了一下,发现需要同时开启两个cmd才可以单次更改文件导入权限,像下面这张图这样:


现在回到正题,如何解决MySQL8.0单次导入外部文件权限的这个问题呢?

我们翻到官方文档那一页去看官方对 –secure-file-priv 地解释:

官方解释了,这个变量是全局变量,存在三种值:

1. 空字符串
2. 文件路径
3. NULL

然后一般我们如果在安装地时候没有设置过,都会是默认地根据平台地设置进行设置,
我这里默认就是NULL值,即禁止外部文件导入和导出。
空字符串即随意导入导出,相对最自由,但是安全系数很低;
文件路径是官方推荐地方法,即你可以设置成你想导入地文件地址,但是前提是这个路径是存在地,MySQL不会自动给你创建。

好了理解上面三个值地意思后,我们再看Command-Line Format这个地方,其实官方已经给出了这个变量在命令行地设置方法,即解决办法。就是它后面对应地值内容,所以我们就开始更改这个权限如下步骤:

  • 先要去把MySQL服务停止了,才能改:

  • 然后cd到你的MySQL的目录下面;

  • 关键地一步来了!第一种解法(空):

mysqld --secure-file-priv=  --console 

然后会看到如下画面:

这个代表刚刚的命令已经生效了,也就是导入文件的权限已经被更改了,现在可以自由导入。
PS:最后加console是为了有内容输出,看看这个命令都执行了什么,据官方文档说也可以不加!

  • 第二种解法(路径,官方推荐的):
mysqld --secure-file-priv=C(也不一定C盘,看你要读取文件在哪个盘):\\你想读取的文件路径\\你要读取的文件路径 --console 

注意:路径之间是双反斜杠。

  • 然后我们再打开普通模式的cmd,正常登录并查看secure这个全局变量,此时可以发现,他已经被更改了(我这里是空的显示就是对的):

    然后就可以进行外部文件的导入了。

经过这又一次踩坑填坑过程,掌柜发现还是官方文档靠谱,以后还是出问题先查官方文档!!!而且MySQL这个看似简单的语言其实有很多细节需要注意的,不同系统的不同MySQL版本解决办法看官方文档
更易加深理解其中区别和奥妙!

最后谢谢大家的阅读,如有错误,请指正!

参考资料:
MySQL8.0官方文档
MySQL配置不生效的问题解决