我正在尝试启用 MySQL 的常规日志(在运行时,以防万一)并设置日志文件的路径。这些是我在建立与服务器的连接后发出的查询:
SET GLOBAL general_log=1;
SET GLOBAL general_log_file='/home/bleistift2/projekte/ng-haushalt-server/mysql-log.log';
服务器响应:
code: 'EE_FILENOTFOUND',
errno: 29,
sqlMessage:
'File \'/home/bleistift2/projekte/ng-haushalt-server/mysql-log.log\' not found (Errcode: 13 - Permission denied)',
sqlState: 'HY000',
index: 0,
sql: 'SET GLOBAL general_log=1;'
我无法解释为什么 MySQL 无法获得打开文件的权限,因为它归用户和组所有mysql
,并且对其具有读写权限。从/
下到ng-haushalt-server
(日志文件的父级)的目录至少都是全球可读和全球可执行的:
drwxr-xr-x 5 root root 4096 Jan 24 11:26 home/
drwxr-xr-x 72 bleistift2 bleistift2 196608 Feb 20 17:08 bleistift2/
drwxrwxr-x 22 bleistift2 bleistift2 4096 Feb 18 15:55 projekte/
drwxrwxr-x 7 bleistift2 bleistift2 4096 Feb 20 17:16 ng-haushalt-server/
-rw-rw-r-- 1 mysql mysql 0 Feb 20 17:30 mysql-log.log
我还验证了用户mysql
可以通过cd
进入文件并手动写入来写入文件:
mysql@bleistift2-yoga / $ cd home
mysql@bleistift2-yoga /home $ cd bleistift2
mysql@bleistift2-yoga /home/bleistift2 $ cd projekte
mysql@bleistift2-yoga /home/bleistift2/projekte $ cd ng-haushalt-server/
mysql@bleistift2-yoga /home/bleistift2/projekte/ng-haushalt-server $ echo "works" >> mysql-log.log
mysql@bleistift2-yoga /home/bleistift2/projekte/ng-haushalt-server $ cat mysql-log.log
works
我尝试为文件提供上述权限和所有权,并且尝试过没有预先存在的文件,希望 MySQL 能够创建它,但两种情况下的错误都是相同的。
我尝试过带有和不带有引号的路径。
通过检查常规查询日志的默认位置,我断言路径中没有拼写错误:
2020-02-21T11:39:13.191408Z 6 Query SET GLOBAL general_log=1
2020-02-21T11:39:13.194485Z 6 Query SET GLOBAL general_log_file="/home/bleistift2/projekte/ng-haushalt-server/mysql-log.log"
# Path copied from general log
$ stat /home/bleistift2/projekte/ng-haushalt-server/mysql-log.log
File: '/home/bleistift2/projekte/ng-haushalt-server/mysql-log.log'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10308h/66312d Inode: 3039703 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 123/ mysql) Gid: ( 131/ mysql)
Access: 2020-02-21 12:38:14.717038315 +0100
Modify: 2020-02-20 17:30:20.639591019 +0100
Change: 2020-02-20 17:30:29.867590984 +0100
Birth: -
我见过另一个问题答案建议将(默认)包含目录的所有权转让给用户mysql
。我宁愿不这样做,因为父目录是服务器端应用程序的根开发目录,我不明白为什么有必要mysql
读取和执行(cd 进入)它。
所有其他查询(SELECT
等)均有效。