Mysql 导出报错 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option

Mysql 2020-07-10 阅读 74 评论 0

问题描述

在 Mac OS 系统中,使用 mysql 8 尝试 SELECT ... INTO OUTFILE 将表的数据导出到文件,最后报错了。

mysql> select * from user FIELDS TERMINATED BY '|' INTO OUTFILE '/Volumes/develop/workspace/mysql/outfile.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

解决方法

secure_file_priv 参数用于限制 LOAD DATASELECT ... INTO OUTFILE 语句和 LOAD_FILE() 方法传到哪个指定目录。参考官网说明

  • NULL 时,表示限制 mysqld 不允许导入或导出。
  • /tmp 时,表示限制 mysqld 只能在 /tmp 目录中执行导入导出,其他目录不能执行。
  • 没有值时,表示不限制 mysqld 在任意目录的导入导出。

查看 mysql 的 secure_file_priv 配置。

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.00 sec)

secure_file_priv 参数是只读参数,不能使用 set global 命令修改。

mysql> set global secure_file_priv='/Volumes/develop/workspace/mysql';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

只能在 my.cnf 文件中修改,注意,必须在 [mysql] 标签下添加。可以修改为空字符串或者详细的路径。

1. 修改为空字符

[mysql]
secure-file-priv = ""

2. 指定具体的路径

[mysql]
secure-file-priv = "/Volumes/develop/workspace/mysql"

注意的是,在 Linux/Unix 系统中,由于 mysql 一般以 mysql 用户运行,不能导出到其他用户目录中,如:

mysql> select * from pigcms_shop_order INTO OUTFILE '/Users/cpm/Downloads/develop/workspace/mysql/outfile.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
最后更新 2020-07-10
MIP.watch('startSearch', function (newVal, oldVal) { if(newVal) { var keyword = MIP.getData('keyword'); console.log(keyword); // 替换当前历史记录,新增 MIP.viewer.open('/s/' + keyword, {replace: true}); setTimeout(function () { MIP.setData({startSearch: false}) }, 1000); } }); MIP.watch('goHome', function (newVal, oldVal) { MIP.viewer.open('/', {replace: false}); });