使用临时表上的键重新发生问题

我们运行一个大量的读写的论坛,特别是poststopics表都是innodb

上个星期我开始用innobackupex进行12小时的备份,因为mysqldump只需要花费很长时间( posts表中有700多万行)。似乎有些东西不喜欢这些备份,因为我每隔一天就有一个反复出现的问题。

症状;

该网站的首页开始抛出错误
日志开始显示错误,如Error: 126 - Incorrect key file for table '/tmp/mysql/#sql_4e87_14.MYI'; try to repair it Error: 126 - Incorrect key file for table '/tmp/mysql/#sql_4e87_14.MYI'; try to repair it
/ tmp / dir填满,我们开始得到Error: 1030 - Got error 28 from storage engine日志中的Error: 1030 - Got error 28 from storage engineError: 1030 - Got error 28 from storage engine

唯一的解决办法是对每个post和主题表格进行optimize table

我正在尽我所能阻止MySQL使用临时表的磁盘,但如果它也使用了我所有的内存,我会遇到更多的问题。

我的my.cnf在这里; https://gist.github.com/cbiggins/0aa26f6defb7a14541d7

盒子有32GB的内存,我通常不会靠近。 目前在15GB的使用。

提前致谢。

更新1:尽pipeconf看起来像有复制,但没有。 这是一个独立的实例。

更新2:现在还没有做超过24小时的备份,问题刚刚再次发生。 所以这不是备份的结果。

更新3:我现在使用tmpfs给了MySQL 20GB的临时空间。 在这里说明 。 去看下一个小时,看看它是怎么回事。

更新4:我发现了一个杀手级的查询! 13秒和230万行检查。 同时做这20次,我很快填补了我的新的20GB的临时目录。 我禁用了使用此查询的块,并向维护者提供了一些反馈 。

我已经决定购买一个超便宜的专用服务器来复制来运行备份。 希望我们可以看到我的正常运行时间再次攀升。 🙂

问题是/ tmp /填满和MySQL把一些文件在那里。

在处理子查询时,MySQL可以做出的select之一是:

参考:MySQL 5.6 – 子查询优化

将子查询实体化到带有索引的临时表中,并使用临时表执行连接。 该索引用于删除重复项。 在将外部表连接到临时表时,该索引也可以稍后用于查找; 如果没有,则扫描表格。

你可以closures这个(subquery_materialization_cost_based),它将使用不同的策略。

参考:MySQL 5.6 – 控制可切换优化

另一个选项是防止/ tmp /通过增加更多的空间或使MySQL把它放在别处的临时文件来填满。