18 mysql
当我启动 MySQL 服务器时,出现此错误:
/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
Run Code Online (Sandbox Code Playgroud)
我已经跑去mysql_upgrade
重建它,它可以重建。在我这样做之前,我删除并安装了 MySQL。但是,当我尝试重新启动时,出现相同的错误。我确信这不是权限问题,因为所有文件和目录都是由mysql
用户创建的。
你能告诉我如何解决这个错误吗?
小智 18
如果您在非标准位置有 mysql 数据目录并且您的系统有 apparmor,请确保将/etc/apparmor.d/usr.sbin.mysqld
您的数据目录列入白名单。配置应如下所示:
/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,
Run Code Online (Sandbox Code Playgroud)
对配置进行任何更改后,必须重新启动 Apparmor 守护进程。
Dim*_*lov 13
你确定不是权限问题? 错误号:13:
$ perror 13
OS error code 13: Permission denied
Run Code Online (Sandbox Code Playgroud)
首先要尝试更改MySQL的 datadir 的所有权,例如,如果您使用用户mysql运行MySQL:
chown -R mysql:mysql /path/to/datadir
Run Code Online (Sandbox Code Playgroud)
要检查的另一件事是mysqld进程所有者(很可能是mysql)是否具有定义为tmpdir的目标的必要权限。如果由于某种原因上述方法不起作用,请尝试跟踪mysqld进程以查看其权限被拒绝的位置和原因:
strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log
Run Code Online (Sandbox Code Playgroud)