Mysql 将 --secure-file-priv 选项设置为 NULL

Mysql making --secure-file-priv option to NULL

我是 运行 MySQL Ubuntu。我在 运行 特定查询集时收到此错误。

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

当我在 mysql 服务器上执行 SELECT @@secure_file_priv; 时,我得到了 /var/lib/mysql-files/。我想我需要把它做到 NULL.

这是我的查询 运行:

LOAD DATA INFILE :file INTO TABLE test_files
COLUMNS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\n';

现在的问题是如何制作这个NULL

尝试:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.12-0  |
+-----------+
1 row in set (0.00 sec)

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

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

[mysqld]
.
.
.
secure_file_priv=NULL
.
.
.

重启MySQL.

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

更新

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

文件:/var/lib/mysql-files/myfile.csv

1,"Row 1"
2,"Row 2"
3,"Row 3"
mysql> DROP TABLE IF EXISTS `test_files`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `test_files` (
    ->   `col0` INT,
    ->   `col1` VARCHAR(20)
    -> );
Query OK, 0 rows affected (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.01 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT
->   `col0`,
->   `col1`
-> FROM
->   `test_files`;
+------+-------+
| col0 | col1  |
+------+-------+
|    1 | Row 1 |
|    2 | Row 2 |
|    3 | Row 3 |
+------+-------+
3 rows in set (0.00 sec)

感谢 wchiquito 的解决方案,它引导我朝着正确的方向前进。

我想在 Windows10 下添加 MySQL8 的解决方案。其中有几点不同。

可以在其他位置找到 my.ini 文件:

C:\ProgramData\MySQL\MySQL Server 8.x\my.ini

可以在此处找到更长的描述:

要更改的变量称为 secure-file-priv,必须取消设置。

[mysqld]
...
secure-file-priv=
...

重新启动后 MySQL 您可以在服务下查看

SELECT LOAD_FILE ('C:\path\to\file\content.txt');
SELECT LOAD_FILE ('C:/path/to/file/content.txt');

文件是否加载。内容应该在这里可见,而不是 NULL。简单的反斜杠对我不起作用。