我在Ubuntu 11.04上安装了LAMP并从Windows复制项目。 PHP目录(/ ci /)到var / www /和MySQL项目目录(/ ci /)到var / lib / mysql /
我得到的错误全文:
A Database Error Occurred
Error Number: 1017
Can't find file: './ci/users.frm' (errno: 13)
SELECT COUNT(*) AS `numrows` FROM (`users`) WHERE `email` = '[email protected]'
我搜索了它的权限问题,但不知道接下来会做什么。
Log from /var/log/mysql/error.log:
110622 19:27:21 [ERROR] /usr/sbin/mysqld: Can't find file: './ci/users.frm' (errno: 13)
权限问题意味着文件的权限。 MySQL可能无法读取它。只需将所有者和组更改为mysql即可。
chown mysql:mysql /var/lib/mysql/ci/*
除了MySQL用户可读的文件外,MySQL用户还需要读取,写入和执行包含.MYI
文件的目录。在我的系统上,这通过以下方式实现
chown -R mysql:mysql /var/lib/mysql/dbname
chmod -R 660 /var/lib/mysql/dbname
chown mysql:mysql /var/lib/mysql/dbname
chmod 700 /var/lib/mysql/dbname
这是一个古老的话题,但我找不到任何对我有用的东西,所以对于遇到同样问题的人来说,上述文件权限建议仍然没有改变“找不到文件”的错误,这里有什么用对我和我的特殊问题。
我正在使用恢复映像从一个CentOS服务器到另一个服务器进行救援,该映像具有与原始操作系统不同的操作系统,并且原始文件系统安装在临时目录上。虽然我可以访问原始的/ var / lib / mysql文件,但我无法访问mysql管理员或转储实用程序,这要求服务器无论如何都要运行(从读取中恢复时不会自动包含它)只有图像)。备份有一周了,我想知道是否可以获得最新的数据。
更改标准文件权限仍然保留了几乎所有数据库表的“找不到文件”,但我可以看到表格在那里。原来它与我使用rysnc移动的文件上的SELinux上下文有关。所有获救的目录和档案都是这样的:
$ ls -alZ
drwx------. mysql mysql unconfined_u:object_r:admin_home_t:s0 somedb_dev
drwx------. mysql mysql unconfined_u:object_r:admin_home_t:s0 somedb_local
drwx------. mysql mysql unconfined_u:object_r:admin_home_t:s0 somedb_production
drwx------. mysql mysql unconfined_u:object_r:admin_home_t:s0 somedb_staging
-Z标志记录文件和目录的安全上下文。注意unconfined_u和admin_home_t上下文。这些与它们应该是不同的:
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
将这些数据库文件更改为正确的上下文解决了问题,并使用chown命令正确访问mysql:
$ chcon -R -u system_u -t mysqld_db_t somedb_*
这将我的所有自定义数据库更改为正确的SELinux上下文,现在mysqld可以识别这些文件。我建议在数据库服务器未处于活动状态时运行chcon commad,这只是一种预防措施。
希望能帮助遇到同样问题的人!当然,您可以暂时关闭SELinux以测试这是否是这个问题,但我不想将SELinux作为永久解决方案。
我按照这个步骤:
有用!!
谢谢
如果表不在数据库中,也会发生此错误;因此,如果您更改了目录的权限并且仍然遇到问题,请检查您的数据库并确保该表存在。
所以,假设您遇到了类似OP的错误:
Can't find file: './ci/users.frm'
ci是数据库名称
users是表名
因此,在这种情况下,如果您更改了权限并仍然遇到此问题,则可以验证users表是否位于ci数据库中。
@Brent Baisley它在XAMPP for Linux中工作,但位置不同。
我今天升级了内核以修复新的Linux“Dirty Cow”漏洞(CVE-2016-5195)。重启后我也得到了'frm'权限错误。
因此,如果您收到以下错误:
Can't find file: 'yourtablename.frm' (errno: 13 - Permission denied) SQL query :...
你可以做:
chown mysql:mysql /opt/lampp/var/mysql/yourDBname/*.frm
这将解决您的问题。
如果您想检查,如果在执行权限更改之前修改了对任何文件的权限,请执行以下操作:
ls -l /opt/lampp/var/mysql/yourDBname/*.frm
希望能帮助别人。