是否可以仅备份.MYD文件? (如果/当发生灾难性故障时重建.MYI)
我想在异地备份相当大的表,同时最大限度地减少带宽使用。数据至关重要,索引文件(5G +)则不然。我们的想法是定期备份.frm和.myd文件并重建索引,如果发生灾难性故障(即本地备份被火灾或被盗破坏)。
使用.frm和.myd进行修复只会给出错误消息。有一个简单的解决方法吗?
答案 0 :(得分:0)
没有。您还必须转储.frm
以便捕获架构。是的,可以重新创建.MYI
。是的,“用.frm和.MYD修复”应该有效;我从未测试过它。您可以通过停止MySQL,将这两个文件复制到另一个数据库,然后尝试修复来测试它。
MyISAM不仅被弃用,而且从下一个版本(8.0)开始消失。将来使用MyISAM基本上没有正当理由。没有使用它的原因很多。
如果.MYI文件大于.MYD文件,则可能做错了。一小部分表确有比数据更多的索引,但是它有点罕见。当有人说“我把每一栏编入索引”时,我就知道他是新手并且不明白:
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)分析表(如果需要收集优化器统计信息)