找不到文件:'。/ ci / users.frm'(错误号码:13)

问题描述 投票:11回答:6

我在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 ubuntu permissions
6个回答
28
投票

权限问题意味着文件的权限。 MySQL可能无法读取它。只需将所有者和组更改为mysql即可。

chown mysql:mysql /var/lib/mysql/ci/*

3
投票

除了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

1
投票

这是一个古老的话题,但我找不到任何对我有用的东西,所以对于遇到同样问题的人来说,上述文件权限建议仍然没有改变“找不到文件”的错误,这里有什么用对我和我的特殊问题。

我正在使用恢复映像从一个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作为永久解决方案。


0
投票

我按照这个步骤:

  • 停止mysql服务。
  • 将my.cnf行datadir修改为我的自定义位置。
  • 删除了我们新自定义位置中的所有文件ib_data *,ib_logfile *
  • 用你的句子改变整个文件夹的权限:chown mysql:mysql -R / custom_location / mysql / *
  • 再次启动mysql服务。

有用!!

谢谢


0
投票

如果表不在数据库中,也会发生此错误;因此,如果您更改了目录的权限并且仍然遇到问题,请检查您的数据库并确保该表存在。

所以,假设您遇到了类似OP的错误:

Can't find file: './ci/users.frm'

ci是数据库名称

users是表名

因此,在这种情况下,如果您更改了权限并仍然遇到此问题,则可以验证users表是否位于ci数据库中。


0
投票

@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

希望能帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.