【问题标题】:Failed to normalize the argument for --secure-file-priv无法规范化 --secure-file-priv 的参数
【发布时间】:2017-09-12 10:29:58
【问题描述】:

我需要执行 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设置为“”,select load_file("file name")仍然返回NULL。

如何禁用secure_file_priv?

【问题讨论】:

  • 试试:SELECT LOAD_FILE("/path/file.name");.

标签: mysql mariadb


【解决方案1】:

这可能是由于 systemd 保护而发生的。对我来说,在 Debian 10 buster 上,我遇到了类似的问题:

如果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 目录是“特殊的”。

简单修复:编辑 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

【讨论】:

  • 我对 /var 中的目录也有同样的问题,知道吗?
【解决方案2】:

我无法重现该问题:

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)

【讨论】:

  • 我尝试编辑 /etc/my.cnf 和 /etc/my.cnf.d/mariadb-server.cnf 但这没有区别。此外,我将 mysql 所有者设为 /path (chown mysql:mysql /path)。我看到的唯一区别是您在我启动 mariadb 时启动了 mysql 服务。这有帮助吗?
【解决方案3】:

我使用 OpenSuSe LEAP 42.3

我改在/etc/my.cnf.d/secure_file_priv.cnf 来自

secure_file_priv = /var/lib/mysql-files

secure_file_priv = /var/lib/mysql

文件夹/var/lib/mysql-files不存在,是这个原因。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2020-11-12
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2017-04-20
    • 2020-05-05
    相关资源
    最近更新 更多