如何解决MySQL服务器运行带有安全文件专用错误

时间:2020-02-23 14:31:01  来源:igfitidea点击:

启动mysqld服务器时,可以在选项文件或者命令行中指定程序选项。这些选项旨在解锁其他MySQL功能,更改变量或者施加限制。

这就是在MySQL服务器中读取选项的方式:mysqldreads从[mysqld]和[server]组中选择mysqld_safereads从[mysqld] 、、 [server],[mysqld_safe]和[ safe_mysqld]组mysql.server从[mysqld]和[mysql.server]组中读取选项。

我们可以使用以下命令查看MySQL支持的选项的简要摘要:

$mysqld --help

要查看完整列表,请使用以下命令:

$mysqld --verbose --help

可以在服务器启动时设置的系统变量之一是" mysqld_secure-file-priv"。

什么是mysqld_secure-file-priv变量?

变量" secure_file_priv"用于限制数据导入和导出操作的效果。受影响的操作的示例是由LOAD DATA和SELECT ... INTO OUTFILE语句以及函数LOAD_FILE()执行的操作。只有具有FILE特权的用户才能使用这些操作。

要在运行时查看当前设置,请使用" SHOW VARIABLES"语句。

以root用户登录MySQL Shell

$mysql -u root -p

然后运行

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/|
+------------------+-----------------------+
1 row in set
Time: 0.023s

我们可以看到目录集是/var/lib/mysql-files /

更改安全文件专用变量目录

可以在[mysqld]部分的MySQL选项文件上更改此值。

sudo vim /etc/my.cnf

在" [mysqld]"部分下设置变量

[mysqld]
secure-file-priv=/mysqlfiles

然后创建配置的目录

sudo mkdir /mysqlfiles
sudo chown -R mysql:mysql  /mysqlfiles/

重新启动MySQL服务以使更改生效

sudo systemctl restart mysqld

再次登录以确认新设置

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+--------------+
| Variable_name    | Value        |
+------------------+--------------+
| secure_file_priv | /mysqlfiles/|
+------------------+--------------+
1 row in set (0.00 sec)

让我们进行测试以确认我们可以导出到指定的路径。

mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

让我们再次尝试写入正确的路径。

mysql> SELECT * FROM information_schema.processlist into outfile '/mysqlfiles/mysql_processes.txt';
Query OK, 1 row affected (0.00 sec)

可能的安全文件专用变量

要禁用它,请将变量设置为NULL值。

[mysqld]
secure-file-priv = ""

重启mysqld服务

sudo systemctl restart mysqld

重新启动服务后确认

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)

尝试将QUERY内容保存到其他路径

mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt';
Query OK, 1 row affected (0.00 sec)

这是成功的。我们已经学习配置secure-file-priv变量以适合用例。直到下一次,感谢我们使用我们的指南来解决试图加载或者保存数据时MySQL服务器正在运行带有secure-file-priverror的问题。