如何在VSCode的SQL环境中将secure-file-priv设置为空?
解决MySQL LOAD DATA INFILE的secure-file-priv限制问题
先确认当前secure-file-priv配置
先运行这条SQL查看MySQL的文件权限配置:
SHOW VARIABLES LIKE 'secure_file_priv';
返回结果分两种情况处理:
情况1:返回指定目录
如果结果是某个具体路径(比如/var/lib/mysql-files/),直接把你的test.csv移动到这个目录下,然后修改导入语句的路径:
LOAD DATA INFILE '/var/lib/mysql-files/test.csv' INTO TABLE num;
情况2:返回NULL(完全禁止导入导出)
需要修改MySQL配置文件,步骤如下:
- 找到配置文件位置:在终端执行命令,查看MySQL读取配置的顺序:
输出会列出可能的配置文件路径,比如mysql --help | grep "Default options"/etc/my.cnf、/etc/mysql/my.cnf、~/.my.cnf,逐个检查这些文件是否存在。 - 修改配置:打开找到的配置文件,在
[mysqld]段落下添加或修改:
(也可以指定一个你有权限的目录,比如secure-file-priv = ""secure-file-priv = "/Users/xxx/Desktop/") - 重启MySQL服务:
- Mac(brew安装):
brew services restart mysql - Linux:
sudo systemctl restart mysql
- Mac(brew安装):
解决LOCAL INFILE无效的问题
如果用LOAD DATA LOCAL INFILE还是不行,需要同时开启服务器端和客户端的LOCAL INFILE支持:
- 开启服务器端配置:在MySQL配置文件的
[mysqld]段落添加:
然后重启MySQL服务。local_infile = ON - VSCode客户端开启支持:在VSCode的MySQL连接配置中,添加
local-infile=1参数。比如在连接字符串末尾加上?local-infile=1,或者在连接插件的高级设置里添加这个参数。
替代方案:用mysqlimport命令行导入
如果上述方法都无法操作,可以直接用终端的mysqlimport工具:
# 注意:CSV文件名要和表名一致(比如num.csv),否则需要加--table参数 mysqlimport --local -u 你的用户名 -p 你的数据库名 /Users/xxx/Desktop/test.csv # 指定表名的写法 mysqlimport --local -u 你的用户名 -p --table num 你的数据库名 /Users/xxx/Desktop/test.csv
内容的提问来源于stack exchange,提问作者海之言
相关产品推荐
相关产品推荐

