首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql -如何修复和备份存档表,也停止增长.ARN扩展文件?

mysql -如何修复和备份存档表,也停止增长.ARN扩展文件?
EN

Database Administration用户
提问于 2018-03-08 09:33:41
回答 1查看 1.4K关注 0票数 0

我有一个带有归档存储引擎的MySQL表构建。这张桌子有100多万条记录。

我的磁盘已经满了,结果是存档表中的一个大.ARN文件。当我清除一些空间时,文件继续增长,直到空间被占用为止。

现在,.ARN文件超过16 on,并且在每次插入时都在增长。相应的.ARZ文件刚好超过8MB。

由于表数据已损坏,因此无法从归档表中提取记录。当我试图修复表时,它会说“表的密钥文件不正确”,这意味着文件系统超出了空间。

但是我没有磁盘空间,所以我必须在本地机器上修复和备份这张桌子。

如何修复存档表、从归档表中备份数据以及释放一些磁盘空间?为什么每次插入时.ARN文件都会不断增长?

EN

回答 1

Database Administration用户

发布于 2018-03-08 17:52:59

这是一个非常棘手的问题,因为档案馆存储引擎的内部结构。

人们在MySQL论坛上也问过同样的问题

需要理解的是档案馆表的文件布局:

  • .frm:无论存储引擎如何,MySQL中的每个表都有一个.frm
  • .ARZ:表数据
  • .ARM:表元数据
  • .ARN:优化文件

让我们从.ARZ开始。Z代表什么?zlib

为什么是兹利布?MySQL文档显示

存储:行在插入时被压缩。归档引擎使用zlib无损数据压缩(请参阅http://www.zlib.net/)。您可以使用优化表来分析表并将其打包成更小的格式(出于使用优化表的原因,请参阅本节后面的部分)。引擎还支持检查表。有几种类型的插入是使用的: INSERT语句只是将行推入压缩缓冲区,该缓冲区根据需要刷新。插入缓冲区由锁保护。选择强制进行同花顺。只有在完成后才能看到大容量插入,除非同时发生其他插入,在这种情况下可以看到部分插入。除非正常插入在加载时发生,否则SELECT不会导致批量插入的刷新。

正在插入的数据发生了某些压缩。如果您的.ARN文件正在增长,它必须在编码/加密方面对每个INSERT执行一些与压缩相关的工作。

注意,zlib.net技术细节在副标题Maximum Compression Factor下说:

根据经验,平减方法的压缩因子超过1000:1。(测试用例是一个填充了零的50 KB文件;它压缩到了大约49 KB。)Mark喜欢计算这样的东西,并报告说zlib格式的理论极限是1032:1 (与其在当前可用的源代码中的实现不同)。引用他的话,限制来自一个长度/距离对最多可以表示258个输出字节。长度至少需要一位,距离至少需要一位,所以两位可以给出258字节,或者8位给出1032字节。动态块没有长度限制,因此您可以任意接近1032:1的限制。他接着指出,当前的实现将其动态块限制在大约8KB(对应8MB的输入数据);加上一些开销,这意味着实际压缩限制约为1030.3:1。不仅如此,压缩数据流本身也可能相当可压缩(仅在这种特殊情况下),因此再次通过平减运行应该会产生进一步的收益。作为比较,请注意,为这种不寻常的数据文件优化的运行长度编码版本--即使用32位整数来表示长度,而不是更常见的8位字节或16位字--可以将测试文件编码为5个字节。这将是一个10,000,000:1的压缩因子(对欧洲人来说是10,000.000:1,对于所有支持上标的工程师和科学家来说是107:1 )。最后,请注意,这种级别的压缩是非常罕见的,只发生在真正琐碎的文件(例如,兆字节的零)。更典型的zlib压缩比为2:1到5:1。

如果存在正在增长的.ARN,则它必须是一个临时表,用于确定行数据是如何压缩并缓存到磁盘上的。(档案馆不缓存内存中的数据)。

此时,您的问题在于存储引擎的压缩层。

下一步该做什么

运行FLUSH TABLES;并将.frm.ARM.ARZ复制到具有相同OS服务器的另一台服务器上。不要从Linux复制到Windows。尝试在那里运行REPAIR TABLE

如果你仍然不能阅读数据,你可能需要做一些更深的潜水。你可以试着下载档案_reader.c (来自Twitter),编译它并尝试读取数据

天哪,蜘蛛侠!!(本人免责声明)

,一旦您恢复了数据

建议#1

不要对替换表使用档案馆命令。为什么?

如果档案馆不公开DELETE操作,但允许REPLACE秘密地这样做,这可能会极大地影响性能。

建议#2

SELECTsINSERTs可以在档案馆表中和平共存。当然,唯一的例外是插入一个新行并同时选择该行。

建议#3

获得一个更大的数据磁盘和更多的RAM。在使用.ARN之前,这应该给zlib在RAM中提供更多的数据压缩空间。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/199708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档