我需要执行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?
本
答案 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)