由于 InnoDB 表很多,MySQL 启动失败?

How*_*ard 2 mysql ubuntu percona

我在 15 个数据库中有大约 6000 个 InnoDB 表,并且使用 innodb_file_per_table 时,我发现每次重新启动 Ubuntu 服务器时,MySQL 无法启动,错误..

Version: '5.1.56-rel12.7-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Percona Server (GPL), 12.7, Revision 224)
111106  5:09:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./db1/tbl182.ibd
InnoDB: File operation call: 'open'.
Run Code Online (Sandbox Code Playgroud)

由于有问题的表(即 tbl182.ibd)的文件名每次都不一样,所以我怀疑是因为 MySQL 对所有表都做了些什么?

但是,当我使用命令(sudo /etc/init.d/mysql restart)重新启动时,MySQL 可以成功启动。这很奇怪!

我的环境:MySQL 版本:5.1.56-rel12.7-log(Ubuntu 10.04 LTS + Percona)

更新

通过删除大量表解决了问题,因此应该与文件限制有关,而不是与权限有关。

我已经将 /etc/init.d/mysql 更改为硬编码值ulimit -n 50000,当我创建大量表时仍然没有帮助。

小智 6

问题不在于文件句柄的限制。那将是错误 24,而不是 13。问题在于它所说的:权限。我已经看过几十次了,即使人们认为一切都设置正确并具有正确的权限,但每次都是权限,而且有人总是发现他们错过了一些东西:) 您要么设置了错误的权限或者你有以下类似的东西:

  • 在更高级别的目录上设置了奇怪的权限,例如 / 被限制。(这有时很重要。)
  • 您有另一个进程,例如mysqld 的两个实例,正在运行并干扰特权。
  • SELinux 或 AppArmor 正在干扰。

您通过删除大量表来“解决”了问题——我认为这不是真正的解决方案。您可能只是删除了一些设置了错误权限的表:)