在MySQL上禁用数据加载的安全priv

ioekq8ef  于 12个月前  发布在  Mysql
关注(0)|答案(7)|浏览(115)

我在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并检查命令行,并确认安全文件确实指向我的目录,第三章并在init文件中确认它指向包含我的文件的正确目录。我尝试更改数据集的位置,在一个新的文件夹,并确认它已被移动到那里与上述方法,它仍然没有工作。
任何帮助都是受欢迎的,谢谢。

mgdq6dx1

mgdq6dx11#

我无法重现这个问题。

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服务器系统变量::secure_file_priv

yjghlzjz

yjghlzjz2#

这在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是您正在写入文件的目录的名称。

wkyowqbh

wkyowqbh3#

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

[mysqld_safe]
[mysqld]
secure_file_priv=""

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

kq4fsx7k

kq4fsx7k4#

请注意,在Windows下,将“secure_file_priv”设置为不同的路径,或者通过将其设置为:

secure_file_priv=""

字符串
如果MySQL服务在低权限帐户上运行(默认5.7安装),则可能无法工作。您可以通过在属性->登录下的服务中选择“本地系统帐户”来更改。

nnsrf1az

nnsrf1az5#

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

fcy6dtqo

fcy6dtqo6#

尝试将\翻转为/,例如:
'C:/ProgramData/MySQL/MySQL Server 8.0/MySQL/'

8hhllhi2

8hhllhi27#

我在macOS上,我无法用secure_file_priv设置修复它。事实上,更新设置对我根本不起作用。我修改了/opt/homebrew/etc/my.cnf文件,因为这是我系统中唯一的.cnf文件。我甚至添加了/etc/my.cnf文件并添加了上述更改,并重新启动mysql,但它不起作用。
对我有效的解决办法是
1.用mysql --local-infile=1 -u <your_username> -p启动mysql服务器
1.在导入查询中使用关键字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;

字符串
希望这个解决方案能奏效!

相关问题