mysql 数据库的符号链接

mysql 数据库的符号链接

我必须在 MySQL (Debian 6.0) 上将一个数据库上的符号链接指向另一个位置。因此/var/lib/mysql/dbname指向/home/user/dbname,但 MySQL 给出

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

我已阅读一些关于在数据目录或表文件上建立符号链接的手册,但是 mysqld 也能读取这种链接吗?

答案1

错误代码(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

答案2

如果您正在运行 Ubuntu(也可能是其他较新的 Linux 版本),那么即使文件权限正确,MySQL 也可能被拒绝访问文件的位置。这是由于应用装甲,这是一个实现基于名称的强制访问控制的 Linux 安全模块。要检查您是否正在运行 AppArmor,请尝试以下命令:

$ sudo apparmor_status

如果此操作有效并且包含 mysqld,您可能需要更改配置。这已在来自 AskUbuntu 的 andol 的有用帖子,但这只是乍一看解决了我的问题(为了方便,我在下面重现了 andol 的帖子,以防其他页面发生变化)。

移动数据库文件并放置符号链接后,文件不再增长,而是写入主 InnoDB 文件(尽管我以前innodb_file_per_table有单独的 DB 文件)。我现在假设 andol 的帖子(以及网络上的许多其他地方)中建议的更改实际上并不够。我最终移动了整个 MySQL 数据目录,并编辑了 AppArmor 文件/etc/apparmor.d/tunables/alias(而不是其他文件)来进行移动(文档在文件中)。这在 Ubuntu 12.4(精确)上正常工作。


以下是 andol 写的——正如我上面所说,这对我没有用。

假设你的新数据目录是/主目录/数据/mysql

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

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

假设我们上面的例子,它们将必须被这两行替换或(可能更可取)补充。

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

在我们启动 MySQL 服务器及其新的数据目录之前,我们还必须明确地重新加载新的 apparmor 配置文件。

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

相关内容