MySQL 8如何导出数据到outfile文件及解决--secure-file-priv报错
MySQL 8 解决--secure-file-priv报错实现OUTFILE导出方案
你遇到的报错核心原因是MySQL服务的secure_file_priv配置未实际生效,或是导出目录权限不足,按以下步骤操作即可正常导出:
1. 确认配置生效
- 修改my.ini后必须重启MySQL服务才能让配置生效,可通过管理员身份运行命令提示符执行以下命令完成重启(服务名以你实际安装的为准,默认是MySQL80):
net stop MySQL80 net start MySQL80
- 重启后登录MySQL,执行以下命令验证配置:
show variables like 'secure_file_priv';
确认返回的value为D:\mysql\upload(路径分隔符正反斜杠都可识别),如果返回NULL或其他路径,说明你修改的不是MySQL实际加载的my.ini文件,可查看Windows服务中MySQL服务的「可执行文件路径」中的--defaults-file参数指向的配置文件,修改该文件即可。
2. 配置导出目录权限
D:/mysql/upload目录需要给MySQL服务的运行用户授予读写权限:
- 右键文件夹 -> 选择「属性」-> 切换到「安全」选项卡 -> 点击「编辑」-> 点击「添加」
- 在对象名称输入框中输入
NETWORK SERVICE(默认MySQL8的服务运行用户),点击检查名称确认后点击确定 - 给该用户勾选「修改」「读取」「写入」「列出文件夹内容」权限,点击确定保存配置
3. 执行导出语句
注意SELECT ... INTO OUTFILE不允许覆盖已存在的文件,导出前请确认目标路径下不存在同名的po.txt文件,存在的话先删除,再执行导出命令:select * into outfile 'D:/mysql/upload/po.txt' From country;
备选导出方案(不受secure_file_priv限制)
如果你不想调整服务端配置,也可以直接在命令行用客户端重定向的方式导出数据,不需要服务端写文件权限:mysql -u 你的用户名 -p 你的数据库名 -e "select * from country;" > D:/mysql/upload/po.txt
执行后输入数据库密码即可完成导出。
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

