Error number: MY-010684; Symbol: ER_NDB_BINLOG_CANT_DROP_EVENT_FROM_DB; SQLSTATE: HY000
Message: NDB Binlog: Unable to drop event in database. Event: %s Error Code: %d Message: %s
错误说明
MY-010684错误提示:ER_NDB_BINLOG_CANT_DROP_EVENT_FROM_DB,SQLSTATE是HY000。直接翻译过来就是“不能从数据库中删除事件”,是MySQL5.5以上,用于NDB特殊存储引擎的二进制日志系统在处理多表间的联接字段操作时报出的一个错误。
常见案例
一般是在使用二进制日志系统的NDB特殊存储引擎时,进行多表联接字段的操作,就有可能报出ER_NDB_BINLOG_CANT_DROP_EVENT_FROM_DB错误,比如:
MySQL[db1]> CREATE TABLE t1
(c1 INT NOT NULL,
c2 CHAR (20),
PRIMARY KEY(c1));
MySQL[db1]> CREATE TABLE t2
(c1 INT NOT NULL,
PRIMARY KEY(c1),
FOREIGN KEY (c1) REFERENCES t1(c1));
MySQL[db1]> INSERT INTO t2 VALUES(1);
然后MySQL会报出:ERROR 1552 (HY000): Cannot drop event from DB ‘test_1’
解决方法
如果遇到这种情况,最可能的解决办法就是:1. 限制或者禁用MySQL的二进制日志系统,可以使用MySQL的提供的特定系统变量/参数来禁用二进制日志系统,不过这样的话,可能会丢失事务的完整一致性;2. 最好的解决方法是,对于NDB存储引擎,避免在多表间的字段操作时使用联接查询,而是使用子查询方法来代替,从而避免这种报错。