关于Temporary error: 1218错误的思考

    在操作mysql cluster的时候,尤其是涉及到数据更新,比如大批量的insert语句、利用ndb_restore还原数据库的时候,经常会出现Temporary error: 1218: Send Buffers overloaded in NDB kernel的错误。出现这个错误是因为SendBufferMemory的使用已经超过了一定的比值,默认是0.8.
   搜索网上的一些解决办法无非是加大SendBufferMemory的值以及TotalSendBufferMemory的值,查看到官网的mysql cluster的论坛说是那个东西和mysql的日志有关系,建议彻底关闭log。这个解决办法的却很让人郁闷。通过我不停的实验,发现这个和你的网路情况有很大的关系,我的环境是因为有一个节点的网络是100M的,其他的都是1000M,当我把那个节点的带宽调整到1000M时,那个问题再没出现过。对此,我分析可能由于ndb是网络数据库,当网络情况不好的时候,会导致发送内容堆积在SendBufferMemory,从而导致1218错误的发生。
    如果你的mysql cluster经常出现这样的错误,请检查你的mysql cluster的网络环境,以及用ethtool查看每个节点上的带宽。

    如果还不能解决这个问题,请临时的暂停日志记录,比如在配置文件中注释掉log-bin=mysql-bin,然后重启mysqld节点,这个可以临时解决这个问题,希望这篇文章对大家有帮助!


备注:经过本人的反复实践,发现这个参数和mysql的二进制日志关系很密切,所以在导入大量数据的时候,吧log-bin=mysql-bin注释,能回避这个错误!
原文地址:https://www.cnblogs.com/feihongwuhen/p/7170056.html