我想将数据库表从生产服务器复制到本地测试机器上,这样我就可以对真实数据执行测试。
我停止了mysql并删除了所有frm、MYD和MYI文件。在这里启动mysql并查询show表会得到一个空的结果集。然后我关闭了mysql,并从服务器上复制了所有的frm、MYD和MYI文件。当启动mysql时,"show tables"按预期显示表,但试图查询它们时,我得到错误消息
错误1017(HY000):找不到文件:"/WhateverTableIQuery.frm'(错误号:13)
但WhateverTableIQuery.frm文件在光盘上,与服务器上的文件相同。
有什么问题吗?
我建议尝试两件事:
1.检查权限
确保您的MySQL数据目录和其中的所有文件都属于MySQL用户和MySQL组。如果您以root用户的身份将文件复制到本地测试机器上,则情况可能并非如此:
chown -R mysql:mysql your-mysql-data-dir-here
2.修复损坏的表
使用mysqlcheck来检查损坏的表,并在发现任何损坏的表时进行修复:
mysqlcheck -u root -p --auto-repair --all-databases
如果在那之后你仍然不能使用这些表,那就试试mysqldump吧!
我在用frm和MYD文件恢复MySQL数据库后遇到了同样的问题。花了几个小时后,我发现我已经配置了数据库目录,只对mysql用户具有读写权限,但没有执行权限。在向数据库目录添加执行权限后,问题得到了解决。
几分钟前我确实遇到了同样的问题,几分钟后我才意识到我没有足够的权限访问要导入的.sql文件。
为了解决这个问题,你可以把文件移到一个你知道可以访问的地方(和你的当前用户)。(例如~/Home_directory)。
我希望我能帮助一些像我一样在寻找答案的孤独的灵魂。
我遇到了同样的问题,并这样做了。。。
- 删除迁移文件夹
- 删除迁移历史记录表(_M)
- 启用、添加和更新迁移
我相信有更好的方法来解决这个问题,但它对我有效。
我更改了mysql数据目录和<table>.frm
文件的权限
如果用作根用户:
- chmod 600 mysql数据目录chmod 600
- mysql数据目录/tableOfData.frm
如果作为非root用户使用:
- chmod 660 mysql数据目录
- chmod 660 mysql数据目录/tableOfData.frm
如果表不存在,则在带有WAMP的Windows上也会发生此错误,即"常规错误:1017找不到文件"。
尝试以下操作:
- 修复整个数据库
- 将权限更改为mysql:mysql
- 重新启动mysql服务
其中一个会起作用。