为MySQL

时间:2016-06-02 15:30:16

标签: mysql sql windows security

我在Windows 10计算机上运行MySQL 5.7。我已经阅读了有关此主题的所有SO主题,但仍然无法弄清楚如何加载我的数据并克服此错误:

Error Code: 1290. The MySQL server is running with the --secure-file-priv 
option so it cannot execute this statement

我有1)检查设置以更改它们以便能够从我保存数据集的目录中加载,2)以管理员身份打开MySQL并检查命令行并确认安全文件确实指向我的目录,3)并在init文件中确认它指向包含我的文件的正确目录。我尝试更改数据集的位置,以便它在新文件夹中并确认已使用上述方法移动到那里,但它仍然无效。

欢迎任何和所有帮助,谢谢。

5 个答案:

答案 0 :(得分:11)

我无法重现这个问题。

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.13    |
+-----------+
1 row in set (0,00 sec)

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0,00 sec)

-- USE ...

mysql> LOAD DATA INFILE '/var/lib/mysql-files/myfile.csv'
    -> INTO TABLE `test_files`
    -> COLUMNS TERMINATED BY ',' ENCLOSED BY '\"'
    -> LINES TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv
option so it cannot execute this statement

更改档案:/etc/mysql/my.cnf

[mysqld]
.
.
.
secure_file_priv=/var/lib/mysql-files/
.
.
.

重启MySQL。

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/     |
+---------------------------+
1 row in set (0,00 sec)

mysql> LOAD DATA INFILE '/var/lib/mysql-files/myfile.csv'
    -> INTO TABLE `test_files`
    -> COLUMNS TERMINATED BY ',' ENCLOSED BY '\"'
    -> LINES TERMINATED BY '\n';
Query OK, 3 rows affected (0,00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

请参阅6.1.4 Server System Variables :: secure_file_priv

答案 1 :(得分:4)

在MACOSX上将.my.cnf添加到您的主目录中,内容为:

[mysqld_safe]
[mysqld]
secure_file_priv=""

https://github.com/Homebrew/homebrew-versions/issues/1552

答案 2 :(得分:3)

这在MacOs Sierra 10.12.6中有效:

使用命令

mysql --help | more

,然后在其中写一行:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf 
~/.my.cnf

在我的情况下,我尝试在主目录中创建my.cnf,但是它没有用。我发现的唯一解决方案是使用

在文件夹等中创建文件
sudo vim /etc/my.cnf

并放入其中

[mysqld_safe]
[mysqld]
secure-file-priv = ""

然后您可以检查所有内容是否都可以使用

select @@GLOBAL.secure_file_priv;

在mysql内并检查该值是否为空并且与NULL不同。

最后将文件保存在目录/ tmp中,然后将其移动到所需的目录中。或者(但可能不安全)使用

chmod 1777 dir

其中dir是您在其中写入文件的目录的名称。

答案 3 :(得分:1)

请注意,在Windows下,将'secure_file_priv'设置为其他路径,或者将其设置为以下方式完全禁用它:

secure_file_priv=""
如果MySQL服务在低权限帐户(默认5.7安装)上运行,则

可能不起作用。您可以通过在“属性”->“登录”下的“服务”中选择“本地系统帐户”来更改该设置。

答案 4 :(得分:0)

  1. 检查要导入的目录的操作系统权限。
  2. 尝试通过“使用LOAD DATA的CVS”导入数据时,请选择使用本地选项。