MySQL ERROR 1290(HY000)--secure-file-priv选项

Adh*_*hil 30 mysql

我正在尝试使用我的脚本中的以下代码将MySQL脚本的结果写入文本文件.

SELECT p.title, p.content, c.name FROM post p
LEFT JOIN category c ON p.category_id=c.id
INTO OUTFILE 'D:\MySql\mysqlTest.txt';
Run Code Online (Sandbox Code Playgroud)

但是,我得到以下内容

错误1290(HY000):MySQL服务器正在运行--secure-file-priv选项,因此无法执行此语句

我该如何解决这个问题?

rus*_*spy 41

Ubuntu 16.04(EASY):找出你可以写的地方

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/     |
+---------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

然后,就在那里写

mysql> SELECT * FROM train INTO OUTFILE '/var/lib/mysql-files/test.csv' FIELDS TERMINATED BY ',';
Query OK, 992931 rows affected (1.65 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

Mac OSX:通过MAMP安装Mysql

找出你可以写的地方

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

NULL意味着你被搞砸了所以你必须创建文件"〜/ .my.cnf"

启用通过MAMP安装的MySQL的读/写(在Mac上):

  1. 打开"MAMP"使用聚光灯
  2. 单击"停止服务器"
  3. 编辑〜/ .my.cnf(使用vi或您喜欢的编辑器)并添加以下行:

    $ vi~/.my.cnf

[mysqld_safe]
[mysqld]
secure_file_priv="/Users/russian_spy/"
Run Code Online (Sandbox Code Playgroud)
  1. 单击"启动服务器"(在MAMP窗口中)

现在检查它是否有效:

一个.启动mysql(默认MAMP用户是root,密码也是root)

$ /Applications/MAMP/Library/bin/mysql -u root -p 
Run Code Online (Sandbox Code Playgroud)

湾 在mysql中查看列入白名单的路径

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /Users/russian_spy/          |
+---------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

C.最后,通过将表导出train为CSV文件进行测试

mysql> SELECT * FROM train INTO OUTFILE '/Users/russian_spy/test.csv' FIELDS TERMINATED BY ',';
Query OK, 992931 rows affected (1.65 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果您希望导出到本地工作站上的任何目录,只需在 `~/.my.cnf` 中设置 `secure_file_priv = ""`。 (2认同)

小智 12

  1. 编辑(CentOS的/etc/my.cnf文件)或(Windows的my.ini文件)
  2. 最后添加 secure-file-priv = ""
  3. 使用停止mysql服务 systemctl stop mysqld
  4. 使用重启它 systemctl start mysqld

它现在允许您导入和导出数据.


Nar*_*uto 8

您无法导出数据,因为它是在mysql配置文件中配置的.打开my.cnf配置文件并检查.

引用MySQL 文档

此变量用于限制数据导入和导出操作,如那些由执行的效果LOAD DATASELECT ... INTO OUTFILE报表和LOAD_FILE()功能.仅允许具有此FILE权限的用户执行这些操作.

secure_file_priv 可以设置如下:

  • 如果为空,则变量无效.

  • 如果设置为目录名称,则服务器会将导入和导出操作限制为仅适用于该目录中的文件.目录必须存在; 服务器不会创建它.

  • 如果设置为NULL,则服务器禁用导入和导出操作.从MySQL 5.7.6开始允许该值.

(空值是默认值,或者可以在my.cnf中明确指定为secure_file_priv="".NULL可以使用secure_file_priv=NULL.设置值.)

因此,如果要导出数据,则需要注释此选项并重新启动mysql服务器.然后你就可以出口了.

  • 请阅读http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html以获取更多mysql服务器系统变量.使用这些变量可以完成很多有趣的事情. (2认同)

zgo*_*mez 7

替换"\""/"文件路径.

像这样:

INTO OUTFILE 'D:/MySql/mysqlTest.txt';
Run Code Online (Sandbox Code Playgroud)


kol*_*leS 5

/etc/my.cnf只需创建一个包含以下内容的文件

[mysqld]
secure_file_priv            = ''
Run Code Online (Sandbox Code Playgroud)

您可以使用此单行:

echo "[mysqld]\nsecure_file_priv\t\t= ''\n" | sudo tee /etc/my.cnf
Run Code Online (Sandbox Code Playgroud)

然后重启mysql。如果使用brew安装mysql,则运行以下命令:

brew services restart mysql
Run Code Online (Sandbox Code Playgroud)