符号链接到MySQL数据库

我不得不把一个数据库的符号链接到MySQL上的另一个位置(Debian 6.0)。 所以/var/lib/mysql/dbname指向/home/user/dbname ,但MySQL给出了

MySQL错误:1017(找不到文件:'./dbname/tbl201206.frm'(errno:13))

我已经阅读了关于在数据目录或表格文件上创build符号链接的一些手册,但是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引起的,它是一个Linux安全模块,它实现了基于名称的强制访问控制。 要检查您是否正在运行AppArmor,请尝试以下命令:

 $ sudo apparmor_status 

如果这个工作,并包括mysqld,你可能需要改变你的configuration。 这已经在AskUbuntu上的一个有用的post中描述过了,但是这只是乍一看为我解决了这个问题(为了方便起见,下面再重新安装orol的post,以防其他页面发生变化)。

移动数据库文件并放置一个符号链接后,文件没有进一步增长,主InnoDB文件被写入(尽pipe我使用innodb_file_per_table来创build单独的数据库文件)。 我现在认为,安东尼(和网上的许多其他地方)在post中提出的变化实际上是不够的。 我最终移动了我的整个MySQL数据目录,并编辑了AppArmor文件/etc/apparmor.d/tunables/alias而不是其他文件(文件在文件中)。 这在Ubuntu 12.4(精确)上正常工作。


这就是安泰尔写的 – 就像我上面所说的那样,这对我不起作用。

让我们假设你的新数据库将是/ home / data / mysql

如果你打开文件/etc/apparmor.d/usr.sbin.mysqld,你会在规则中find这两行。

 /var/lib/mysql/ r, /var/lib/mysql/** rwk, 

假设我们上面的例子,他们将不得不被replace或(可能是最好的)补充这两行。

 /home/data/mysql/ r, /home/data/mysql/** rwk, 

在启动我们的MySQL服务器之前,我们还需要明确地重新载入我们的新apparmorconfiguration文件。

 $ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld