我不得不在一个数据库上建立一个符号链接到 MySQL (Debian 6.0) 上的另一个位置。所以/var/lib/mysql/dbname
指向/home/user/dbname
,但 MySQL 给出
MySQL 错误:1017(找不到文件:'./dbname/tbl201206.frm'(错误号:13))
我已经阅读了一些关于在数据目录或表文件上创建符号链接的手册,但是 mysqld 也可以读取这种链接吗?
我不得不在一个数据库上建立一个符号链接到 MySQL (Debian 6.0) 上的另一个位置。所以/var/lib/mysql/dbname
指向/home/user/dbname
,但 MySQL 给出
MySQL 错误:1017(找不到文件:'./dbname/tbl201206.frm'(错误号:13))
我已经阅读了一些关于在数据目录或表文件上创建符号链接的手册,但是 mysqld 也可以读取这种链接吗?
错误代码
(errno: 13)
表示权限被拒绝。检查mysql
用户是否有读写权限/home/user/dbname
及其下的所有文件。您可以使用
sudo su mysql
然后一些访问文件的命令来执行此操作,例如file /home/user/dbname/tbl201206.frm
.要修复它,您可能想要这样做
chown -R mysql:mysql /home/user/dbname
。您可能还需要chmod +x /home/user
.如果您正在运行 Ubuntu(可能还有其他最新的 Linux 版本),那么即使文件权限正确,MySQL 也可能会被拒绝访问您的文件位置。这是由AppArmor引起的,AppArmor是一个实现基于名称的强制访问控制的 Linux 安全模块。要检查您是否正在运行 AppArmor,请尝试以下命令:
如果这有效并且包括 mysqld,您可能需要更改您的配置。这已在andol 在 AskUbuntu 上的一篇有用的帖子中进行了描述,但这只是乍一看才解决了我的问题(为了方便,我在下面复制了 andol 的帖子,以防其他页面发生变化)。
移动数据库文件并放置一个符号链接后,该文件没有进一步增长,而是写入了主 InnoDB 文件(即使我过去确实
innodb_file_per_table
有单独的数据库文件)。我现在假设 andol(以及网络上的许多其他地方)在帖子中建议的更改实际上是不够的。我最终移动了我的整个 MySQL 数据目录并编辑了 AppArmor 文件/etc/apparmor.d/tunables/alias
(没有其他文件)来进行移动(文档在文件中)。这在 Ubuntu 12.4(精确)上正常工作。这是 andol 写的——正如我上面所说,这对我不起作用。
让我们假设您的新数据目录为/home/data/mysql。
如果您打开文件/etc/apparmor.d/usr.sbin.mysqld,您将在规则中找到这两行。
假设我们上面的例子,它们将不得不被这两行替换或(可能更可取)补充。
在我们使用新的数据目录启动 MySQL 服务器之前,我们还必须显式地重新加载新的 apparmor 配置文件。