Error number: MY-010656; Symbol: ER_NDB_BINLOG_INJECTING_RANDOM_WRITE_FAILURE; SQLSTATE: HY000
Message: NDB Binlog: Injecting random write failure
MY-010656 / ER_NDB_BINLOG_INJECTING_RANDOM_WRITE_FAILURE,是MySQL用NDB存储引擎运行binlog日志时出现的一个错误。此错误通常会因为多租户表插入和更新操作而出现。
错误说明
当数据库上使用NDB store引擎执行多重租户表操作(update,insert),会由于某些原因无法正确记录日志信息,导致这个错误出现。这时mysqld会抛出 MY-010656 / ER_NDB_BINLOG_INJECTING_RANDOM_WRITE_FAILURE 错误,具体报错信息为:
“Got error 729 ‘Failed to inject random write to binlog’ from NDB”
常见案例
这个比较常见的案例是由于在MySQL的NDB存储引擎上执行的多租户表操作(update,insert)发生了随机写失败,从而导致该错误。虽然这种错误并不会影响运行中的数据,但是可能会造成MySQL主从复制失效,并导致部分数据出现丢失等情况。
解决方法
1.重放binlog日志
首先把MySQL主库停止更新操作,然后尝试重放binlog日志到slave服务器,这样就可以将数据同步到slave服务器。
2.更新MySQL版本
如果还是不能解决问题,可以尝试更新MySQL版本,由于新的MySQL版本有更多的修复补丁,可能可以解决这个问题。
3.检查Ndb_binlog_index表
可以通过检查Ndb_binlog_index表来检查是否有重复的binlog文件,如果有的话那应该删除掉。因为它们会在binlog日志重放时造成阻碍。
4.关闭自动恢复服务
当MySQL将随机写数据到binlog日志时,有可能会出现”AutoRecover“服务恢复数据失败而导致这个错误,可以尝试关闭”Autorecover“服务来解决该问题。
总之,MY-010656 / ER_NDB_BINLOG_INJECTING_RANDOM_WRITE_FAILURE 错误由于MySQL的NDB存储引擎执行多重租户表操作(update,insert)失败而引发的,解决方法根据情况可以有重放binlog日志,更新MySQL版本,检查Ndb_binlog_index表,关闭自动恢复服务等,可以根据实际场景酌情使用。