由于许多InnoDB表,MySQL无法启动?

我在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'. 

由于有问题的表(即tbl182.ibd)的文件名每次都不相同,所以我怀疑是由于MySQL正在做所有的表的东西?

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

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

更新

问题通过删除大量表来解决,所以它应该是与文件限制有关的东西,而不是权限。

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

问题不在于文件句柄的限制。 这将是错误24,而不是13.问题是它说:权限。 我已经看过几十次了,甚至当人们认为所有东西都正确设置并且拥有正确的权限的时候,每次都是权限,而且有人总是发现他们错过了某些东西:)你可能有权限设置错误或者你有如下的东西:

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

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

我build议你在数据库文件所在的目录中检查数据库用户的写权限。

这是一个AppArmor的问题? 这可能类似于AppArmor在重新启动时以及尝试手动启动时启动或中止的事情。

在同一时间检查您的系统日志。