禁用安全私有以加载MySQL上的数据

dat*_*ant 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
Run Code Online (Sandbox Code Playgroud)

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

欢迎任何和所有的帮助,谢谢.

wch*_*ito 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
Run Code Online (Sandbox Code Playgroud)

更改文件: /etc/mysql/my.cnf

[mysqld]
.
.
.
secure_file_priv=/var/lib/mysql-files/
.
.
.
Run Code Online (Sandbox Code Playgroud)

重启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
Run Code Online (Sandbox Code Playgroud)

请参见6.1.4服务器系统变量:: secure_file_priv


Gal*_*ses 8

这适用于 MacOs Sierra 10.12.6:

使用命令

mysql --help | more
Run Code Online (Sandbox Code Playgroud)

并寻找一行写着:

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
Run Code Online (Sandbox Code Playgroud)

就我而言,我尝试在主目录中创建一个 my.cnf,但没有成功。我找到的唯一解决方案是在文件夹等中创建文件

sudo vim /etc/my.cnf
Run Code Online (Sandbox Code Playgroud)

并放入其中

[mysqld_safe]
[mysqld]
secure-file-priv = ""
Run Code Online (Sandbox Code Playgroud)

然后你可以检查一切是否正常

select @@GLOBAL.secure_file_priv;
Run Code Online (Sandbox Code Playgroud)

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

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

chmod 1777 dir
Run Code Online (Sandbox Code Playgroud)

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


小智 5

在 MACOSX 上,将 .my.cnf 添加到您的主目录,其中包含以下内容:

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

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