我在 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 文件中确认它指向包含我的文件的正确目录。我尝试更改数据集的位置,使其位于新文件夹中,并确认已使用上述方法将其移动到那里,但它仍然不起作用。
欢迎任何和所有帮助,谢谢。
我无法重现该问题。
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
这适用于 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 是您在其中写入文件的目录的名称。
在 MACOSX 上,将 .my.cnf 添加到您的主目录,内容为:
[mysqld_safe]
[mysqld]
secure_file_priv=""
请注意,在 Windows 下,将“secure_file_priv”设置为不同的路径或通过将其设置为完全禁用它:
secure_file_priv=""
如果 MySQL 服务在低权限帐户上运行(默认 5.7 安装),则可能无法工作。您可以通过在属性 -> 登录下的服务中选择“本地系统帐户”来更改它。
尝试将 \ 翻转为 / 例如:
'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/'
我使用的是 macOS,但无法使用
secure_file_priv
设置修复该问题。
事实上更新设置对我来说根本不起作用..
我修改了 /opt/homebrew/etc/my.cnf
文件,因为这是我的系统中唯一存在的 my.cnf 文件。我什至添加了/etc/my.cnf
文件并添加了上述更改,并重新启动了mysql,但它不起作用。
对我有用的解决方案是
mysql --local-infile=1 -u <your_username> -p
LOCAL
LOAD DATA LOCAL INFILE '/path/to/your/csv/file.csv'
INTO TABLE your_table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
希望这个解决方案有效!