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
。简单的反斜杠对我不起作用。
我是 运行 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
。简单的反斜杠对我不起作用。