不,你必须抛弃 .frm 以便捕获架构。是的 .MYI 可以重新创建。是的,“用.frm和.MYD修复”应该有效;我从未测试过它。您可以通过停止MySQL,将这两个文件复制到另一个数据库,然后尝试修复来测试它。
.frm
.MYI
MyISAM不仅被弃用,而且从下一个版本(8.0)开始消失。将来使用MyISAM基本上没有正当理由。没有使用它的原因很多。
如果.MYI文件大于.MYD文件,那么 可以 做错了。一小部分表确有比数据更多的索引,但是它有点罕见。当有人说“我索引每一栏”时,我知道他是一个新手并且不明白:
SELECT
如果您想最大限度地减少带宽使用,我可以建议一些其他可能的策略:
使用mysqldump,因为输出只包含数据,没有索引内容。还原转储时将重新创建索引。
压缩备份,然后传输压缩文件。它可能是未压缩备份大小的十分之一。
使用复制,因此只有对数据库的增量更改才会传输到您的其他站点。然后在副本上运行备份。
通过将文件复制出数据目录来进行“备份”对于数据完整性是不安全的。你应该使用像mysqldump这样的备份工具。
要在没有.MYI的情况下完全恢复MyIsam表(即仅从.frm和.myd文件中恢复),请运行:
REPAIR tableName USE_FRM;
要对结构+数据进行快速而紧凑的备份,请运行:
FLUSH TABLES tableName WITH READ LOCK;
[制作.frm和.myd文件的副本。无需复制.myi]
UNLOCK TABLES
对于大型表,复制.myd文件比使用mysqldump提供了更快的备份。我跑了一个快速测试,一个6G的表用了6分钟来备份mysqldump和5秒直接拷贝。 mysqldump文件是myd + myi文件的组合大小。 .myd文件可以/应该被压缩(我使用7z)。
直接复制是MySQL官方讨论的几种备份方法之一 文件
另一种方法是创建一个像要保护的空表。
对于备份: 1)像原始一样创建一个空表 2)备份原始.frm& .MYD 3)在备份集中包含空的.MYI 4)放下空桌子 恢复步骤:
1)恢复表(原始的.frm& .MYD和空的.MYI恢复到与.frm& .MYD相同的数据库) 2)锁定桌子以防止其使用 3)运行myisamchk(我更喜欢从OS运行 - 索引重新生成可以并行化并分析优化器统计信息) 4)刷新表格表(如果从OS修复则需要) 5)解锁桌子 6)分析表(如果需要收集优化器统计信息)