我在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.问题是它说:权限。 我已经看过几十次了,甚至当人们认为所有东西都正确设置并且拥有正确的权限的时候,每次都是权限,而且有人总是发现他们错过了某些东西:)你可能有权限设置错误或者你有如下的东西:
您通过删除大量表格来“解决”问题 – 我不认为这是一个真正的解决scheme。 你可能只是删除了一些设置了错误权限的表:)
我build议你在数据库文件所在的目录中检查数据库用户的写权限。
这是一个AppArmor的问题? 这可能类似于AppArmor在重新启动时以及尝试手动启动时启动或中止的事情。
在同一时间检查您的系统日志。