如何解决"MySQL服务器使用-secure-file-priv"错误运行
时间:2020-02-23 14:32:14 来源:igfitidea点击:
在开始时 mysqld
服务器,我们可以在选项文件或者命令行上指定程序选项。
这些选项旨在解锁其他MySQL功能,更改变量或者强制限制。
这就是在MySQL Server中读取的选项:MySQLD读取选项 [mysqld]
和 [server]
groupsmysqld_safe从中读取选项 [mysqld]
那 [server]
那 [mysqld_safe]
, 和 [safe_mysqld]
groupsmysql.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
privilege.to查看运行时的当前设置,使用 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)
验证安全文件 - 权力变量
要禁用它,请将变量设置为空值。
[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)
尝试将查询内容保存到其他路径
mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt'; Query OK, 1 row affected (0.00 sec)