我在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)
答案 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
希望能有所帮助。