如何解决MySQL服务器运行带有安全文件专用错误
启动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的问题。