无法规范化--secure-file-priv的参数

时间:2017-09-12 10:29:59

标签: mysql mariadb

我需要执行load_file()语句。该文档告诉我必须通过将secure_file_priv设置为“”来禁用它,或者将其设置为路径。如果没有,load_file()将返回NULL。

当我编辑my.cnf并将mysqld-group中的这个变量设置为“”时,我可以毫无问题地重启mariadb。 如果我将此变量设置为路径(secure_file_priv =“/ path /”,则会得到以下输出:

> sudo systemctl restart mariadb.service
Job for mariadb.service failed because the control process exited with error code.
See "systemctl  status mariadb.service" and "journalctl  -xe" for details.

> sudo systemctl  status mariadb.service
mariadb.service - MariaDB 10.1 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2017-09-12 10:50:59 CEST; 13s ago
  Process: 4815 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 5306 ExecStart=/usr/libexec/mysqld --basedir=/usr $MYSQLD_OPTS $_WSREP_NEW_CLUSTER (code=exited, status=1/FAILURE)
  Process: 5271 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
  Process: 5249 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited,         status=0/SUCCESS)
 Main PID: 5306 (code=exited, status=1/FAILURE)
   Status: "MariaDB server is down"

sep 12 10:50:57 BEL002.HOME systemd[1]: Starting MariaDB 10.1 database server...
sep 12 10:50:58 BEL002.HOME mysql-prepare-db-dir[5271]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done.
sep 12 10:50:59 BEL002.HOME mysqld[5306]: 2017-09-12 10:50:59 139800931358976 [Warning] Failed to normalize the argument for --secure-file-priv.
sep 12 10:50:59 BEL002.HOME mysqld[5306]: 2017-09-12 10:50:59 139800931358976 [ERROR] Aborting
sep 12 10:50:59 BEL002.HOME systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
sep 12 10:50:59 BEL002.HOME systemd[1]: Failed to start MariaDB 10.1 database server.
sep 12 10:50:59 BEL002.HOME systemd[1]: mariadb.service: Unit entered failed state.
sep 12 10:50:59 BEL002.HOME systemd[1]: mariadb.service: Failed with result 'exit-code'.

我已经执行了“chmod 777 / path /”。 如果我将secure_file_priv设置为“”,则选择load_file(“文件名”)仍然返回NULL。

如何禁用secure_file_priv?

2 个答案:

答案 0 :(得分:1)

由于系统保护,可能会发生这种情况。对我来说,在Debian 10破坏者上,我遇到了类似的问题:

如果secure-file-priv=/home-守护程序启动,但在SELECT ... INTO OUTFILE时失败。如果secure-file-priv=/home/username-守护程序无法启动并出现Failed to normalize the argument for --secure-file-priv错误。但是,如果我将其他路径用于secure-file-priv,则一切正常,只有/ home目录是'special'。

轻松修复:编辑mariadb systemd服务文件(对于debian,这是/lib/systemd/system/mariadb.service)。查找代码:

# Prevent accessing /home, /root and /run/user
ProtectHome=true

并设置ProtectHome=false

如果其他目录(/usr/boot/etc)有问题,请选中ProtectSystem选项。如果/tmp有问题,请检查PrivateTmp

文档:https://www.freedesktop.org/software/systemd/man/systemd.exec.html

答案 1 :(得分:0)

我无法重现这个问题:

MariaDB [(none)]> SELECT VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 10.1.26-MariaDB |
+-----------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SHOW VARIABLES
    -> WHERE VARIABLE_NAME = 'secure_file_priv';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> \! bash
$ vi /etc/mysql/my.cnf

[mysqld]
...
secure_file_priv = /path/
...

$ service mysql restart

$ mkdir /path/

$ vi /path/file.name

$ ll /path/file.name
-rw-r--r-- 1 mysql mysql /path/file.name

$ exit
MariaDB [(none)]> SHOW VARIABLES
    -> WHERE VARIABLE_NAME = 'secure_file_priv';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| secure_file_priv | /path/ |
+------------------+--------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT LOAD_FILE('/path/file.name');
+------------------------------+
| LOAD_FILE('/path/file.name') |
+------------------------------+
| Hello MariaDB!               |
+------------------------------+
1 row in set (0.00 sec)