文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么解决MySQL中的ERROR 1799报错问题

2024-04-02 19:55

关注

这篇文章主要介绍“怎么解决MySQL中的ERROR 1799报错问题”,在日常操作中,相信很多人在怎么解决MySQL中的ERROR 1799报错问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决MySQL中的ERROR 1799报错问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

【问题描述】:
版本:MySQL 5.6.36 (以上的版本都可能出现)
行为:对某些访问频繁的大表做Online DDL
现象:
ERROR 1799 (HY000): Creating index 'GEN_CLUST_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

比如:

  1. mysql> ALTER TABLE a ENGINE=innodb;

  2. ERROR 1799 (HY000): Creating index 'GEN_CLUST_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.


  3. mysql> ALTER TABLE a DROP idx_name;

  4. ERROR 1799 (HY000): Creating index 'idx' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

只要是DDL相关的,就可能遇到这样的问题,比如在optimize table时:

  1. mysql> OPTIMIZE TABLE a;

  2. +--------+----------+----------+-------------------------------------------------------------------+

  3. | Table  | Op            | Msg_type | Msg_text                                                                                                                   |

  4. +--------+----------+----------+-------------------------------------------------------------------+

  5. | test.a | optimize | note         | Table does not support optimize, doing recreate + analyze instead |

  6. | test.a | optimize | error    | Creating index 'FTS_DOC_ID_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again. |

  7. | test.a | optimize | status   | OK                                                                                                                               |

  8. +--------+----------+----------+-------------------------------------------------------------------+

  9. 2 rows in set (18.13 sec)

虽然optimize对innodb表没什么用,但是仍然会抛出该错误

那么查看一下手册,可以得知:
innodb_online_alter_log_max_size控制在用于在Online DDL操作时的一个临时的日志文件的上限值大小。
该临时的日志文件存储了在DDL时间内,dml操作的记录。这个临时的日志文件依照innodb_sort_buffer_size的值做扩展。
如果该日志超过了innodb_online_alter_log_max_size的最大上限,DDL操作则会抛出失败,并且回滚所有未提交的DML操作。
反过来说,该值如果设置更高,则可以允许在做Online DDL时,有更多的DML操作发生。
但因此带来的问题就是,在DDL做完之后,需要更多时间来锁表和应用这些日志。


另外对于某些DDL操作,比如
ADD INDEX/COLUMN,则可以通过调整innodb_sort_buffer_size的大小来加快操作速度。
但是实际上分配的内存为3倍的innodb_sort_buffer_size值。

innodb_online_alter_log_max_size和innodb_sort_buffer_size均为5.6 Online DDL的新参数。

【解决方案】:

知道这个参数控制的是什么东西,就好解决了。
临时调大该值,此处改成了256MB:

  1. mysql> SET GLOBAL innodb_online_alter_log_max_size=256*1024*1024;

  2. Query OK, 0 rows affected (0.03 sec)

该值默认为128MB,还是建议在做完DDL之后再将其改为默认值,也就是134217728。

到此,关于“怎么解决MySQL中的ERROR 1799报错问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯