Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Can';找不到文件:'/ci/users.frm';(错误编号:13)_Mysql_Ubuntu_Permissions - Fatal编程技术网

Mysql Can';找不到文件:'/ci/users.frm';(错误编号:13)

Mysql Can';找不到文件:'/ci/users.frm';(错误编号:13),mysql,ubuntu,permissions,Mysql,Ubuntu,Permissions,我在Ubuntu11.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`

我在Ubuntu11.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)

权限问题意味着对文件的权限。MySQL可能无法读取它。只要将所有者和组更改为mysql,它就可以工作了

chown mysql:mysql /var/lib/mysql/ci/*
我遵循以下步骤:

  • 停止mysql服务

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

  • 已删除新自定义位置中的所有文件ib_数据*、ib_日志文件*

  • 使用以下语句更改整个文件夹的权限: chown-mysql:mysql-R/custom\u-location/mysql/*

  • 再次启动mysql服务

它起作用了


感谢

以及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

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

假设你有一个错误,比如OP:


找不到文件:'./ci/users.frm'

ci是数据库名称

users是表名


因此,在本例中,如果您更改了权限,但仍然存在此问题,您将验证users表是否在ci数据库中。

@Brent Baisley它在XAMPP for Linux中确实有效,但位置不同

我今天确实升级了内核以修复新的Linux“脏牛”漏洞(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

希望这对某人有所帮助。

这是一个老话题,但我没有发现任何对我有用的东西,因此对于遇到相同问题的人来说,上述文件权限建议仍然没有改变“找不到文件”错误,以下是对我有用的内容和我的特殊问题

我正在使用恢复映像从一台CentOS服务器拯救到另一台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标志表示文件和目录的安全上下文。请注意未定义的上下文和管理上下文。这些与它们应该是的不同:

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作为永久解决方案关闭。

您能否提供:ls-al/var/lib/mysql/ci的输出?您可能需要chmod或chown。/cli/users.frm文件,以便mysqld可以访问它。对于serverfault.comYup,或者甚至是
chown-R mysql:mysql/var/lib/mysql/ci
来说,授予mysql用户对整个目录及其所有文件的所有权可能是一个最好的问题。可能需要将新表添加到数据库中。工作正常,但我需要chmod-rg+w/var/lib/mysql/ci和chmod-rg+R/var/lib/mysql/ci。为什么投票失败,我想知道为什么没人愿意解释。省去了我很多痛苦:)