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

时间:2011-06-22 16:41:08

标签: mysql ubuntu permissions

我在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` = 'admin@localsite.com'

我用谷歌搜索了它的权限问题,但不知道下一步该做什么。

Log from /var/log/mysql/error.log:

    110622 19:27:21 [ERROR] /usr/sbin/mysqld: Can't find file: './ci/users.frm' (errno: 13)

6 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分: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

答案 2 :(得分: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

将这些数据库文件更改为正确的上下文解决了问题,并使用chcon命令正确访问mysqld:

$ chcon -R -u system_u -t mysqld_db_t somedb_*

这将我的所有自定义数据库更改为正确的SELinux上下文,现在mysqld可以识别这些文件。我建议在数据库服务器未处于活动状态时运行chcon commad,这只是一种预防措施。

希望能帮助遇到同样问题的人!当然,您可以暂时关闭SELinux以测试这是否是这个问题,但我不想将SELinux作为永久解决方案。

答案 3 :(得分:0)

我按照以下步骤操作:

  • 停止mysql服务。

  • 将my.cnf行datadir修改为我的自定义位置。

  • 在新的自定义位置删除了所有文件ib_data *,ib_logfile *

  • 使用您的句子更改整个文件夹的权限: chown mysql:mysql -R / custom_location / mysql / *

  • 再次启动mysql服务。

它有效!!

由于

答案 4 :(得分:0)

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

所以,让我们说你得到的错误就像OP:

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

ci 是数据库名称

用户是表名

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

答案 5 :(得分: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

希望能有所帮助。