Mysql 导出报错 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option
问题描述
在 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 DATA,SELECT ... 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