仅备份myIsam .MYD

时间:2017-01-29 18:32:45

标签: mysql backup myisam

是否可以仅备份.MYD文件? (如果/当发生灾难性故障时重建.MYI)

我想在异地备份相当大的表,同时最大限度地减少带宽使用。数据至关重要,索引文件(5G +)则不然。我们的想法是定期备份.frm和.myd文件并重建索引,如果发生灾难性故障(即本地备份被火灾或被盗破坏)。

使用.frm和.myd进行修复只会给出错误消息。有一个简单的解决方法吗?

4 个答案:

答案 0 :(得分:0)

没有。您还必须转储.frm以便捕获架构。是的,可以重新创建.MYI。是的,“用.frm和.MYD修复”应该有效;我从未测试过它。您可以通过停止MySQL,将这两个文件复制到另一个数据库,然后尝试修复来测试它。

MyISAM不仅被弃用,而且从下一个版本(8.0)开始消失。将来使用MyISAM基本上没有正当理由。没有使用它的原因很多。

如果.MYI文件大于.MYD文件,则可能做错了。一小部分表确有比数据更多的索引,但是它有点罕见。当有人说“我把每一栏编入索引”时,我就知道他是新手并且不明白:

  • 可能永远不会使用标志(和其他低基数列)的索引。
  • “复合”索引通常很有用。
  • MySQL很少在同一SELECT中使用两个索引。

答案 1 :(得分:0)

如果您想最大限度地减少带宽使用,我可以建议一些其他可能的策略:

  • 使用mysqldump,因为输出只包含数据,没有索引内容。恢复转储时将重新创建索引。

  • 压缩备份,然后传输压缩文件。它可能是未压缩备份大小的十分之一。

  • 使用复制,因此只有对数据库的增量更改才会传输到您的其他站点。然后在副本上运行备份。

您的数据完整性不安全"备份"通过将文件复制出数据目录。您应该使用mysqldump等备份工具。

答案 2 :(得分:0)

要完全恢复没有.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官方documentation

中讨论的几种备份方法之一

答案 3 :(得分:0)

另一种方法是创建一个类似于要保护的空表。

备份:

1)像原来一样创建一个空表 2)备份原始.frm& .MYD
3)在备份集
中包含空的.MYI 4)放下空表


恢复步骤:

1)恢复表格(原始.frm& .MYD和空的.MYI恢复到与.frm& .MYD相同的数据库)
   2)锁定桌子以防止其使用
   3)运行myisamchk(我更喜欢从操作系统运行 - 索引重新生成可以并行化并分析优化器统计信息)
   4)刷新表格表(从OS修复时需要)
   5)解锁工作台
   6)分析表(如果需要收集优化器统计信息)