MySQL提示:1615: Prepared statement needs to be re-prepared

问题现象

在RDS MySQL实例中使用Prepared statement提交SQL时报错:

1615: Prepared statement needs to be re-prepared

可能原因

该报错可能由以下两种原因引入:

  • 原因一:

    Prepared statement的执行过程分2个阶段:先执行一次prepare,然后再执行execute(可以多次执行)。

    在执行prepare和execute的间隙,TABLE_SHARE发生了重建(数据被换出换入)。

  • 原因二:

    MySQL 8.0.22引入一个bug,在group_concat_max_len超过4294967295时,会报该错误,在MySQL 8.0.26修复了该bug。

解决方案

根据可能原因对应以下两种解决方案:

  • 方案一:在RDS控制台的参数设置页面,修改table_definition_cache参数值,建议将参数值设置为{LEAST(DBInstanceClassMemory/1073741824*512, 8192)}。修改方法,请参见设置实例参数
  • 方案二:升级实例到最新的内核小版本。升级方法,请参见升级内核小版本