gpt4 book ai didi

MySQL 错误 1017 (HY000) : Can't find file: './"DatabaseName/Table. frm' (errno: 13)

转载 作者:行者123 更新时间:2023-12-01 00:42:15 28 4
gpt4 key购买 nike

您可以通过简单地复制 .frm 文件来创建表格的副本吗?我打算做这样的事情:

假设我的数据库名为 mydb,它有一个名为 mytab 的表。浏览到文件系统中名为 mydb 的文件夹,它有一个 mytab.frm 文件。然后将 mytab.frm 的内容复制到一个名为 copy.frm 的文件中然后我登录到 mysql 并运行以下命令:

use mydb;  //Selects the database mydb
show tables; //To see the list of tables. I can see the table named copy.
select * from copy; //This throws the error mentioned in the title.

那我错过了什么?您复制哪些文件来备份数据库?我知道该表可以通过几个 sql 语句复制但是我想学习一些已知的东西所以我正在试验。谢谢! :)

最佳答案

只是把这个作为答案:

您不能对 InnoDB 表执行您尝试过的操作。 InnoDB 将所有表数据存储在一个文件中——ibdata。您可以使用 my.cnf 中的 innodb_file_per_table 设置修改它,但它不具有追溯力,它只会应用于新表。即使你确实有每个表设置的文件,你仍然不应该尝试只复制数据文件,因为 innodb 可能没有刷新从 ib_logfile 到 ibdata/.ibd 文件的所有更改,所以你很可能会得到损坏的数据。

您可以为 MyISAM 表执行此操作,但您不应该这样做(还有其他要复制的文件,因为 .FRM 只是表定义。.MYD 文件包含数据和 .MYI文件包含索引)。为什么?因为您将数据委托(delegate)给数据库,所以您应该使用数据库工具来复制它。您应该直接接触数据文件的唯一时间是在数据恢复期间,并且只有在服务器未运行时 - 您不希望在写入文件时复制文件。

要复制表格,只需执行以下操作:

创建表 new_table as select * from old_table

要备份整个数据库,请使用 mysqldump 或其他可用的备份工具之一。

关于MySQL 错误 1017 (HY000) : Can't find file: './"DatabaseName/Table. frm' (errno: 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29575073/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com