Mysql经常宕机Unsafe statement written to the binary log解决办法


[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.

查了下原因,longxibendi这个表上有2个唯一键。则使用 INSERT… ON DUPLICATE KEY UPDATE ,且当前数据库binlog_format是statement格式,这种sql语句就会报unsafe。


INSERT … ON DUPLICATE KEY UPDATE statements on tables with multiple primary or unique keys. When executed against a table that contains more than one primary or unique key, this statement is considered unsafe, being sensitive to the order in which the storage engine checks the keys, which is not deterministic, and on which the choice of rows updated by the MySQL Server depends.

An INSERT … ON DUPLICATE KEY UPDATE statement against a table having more than one unique or primary key is marked as unsafe for statement-based replication beginning with mysql 5.6.6. (Bug #11765650, Bug #58637)

看官方解释,是 server层把数据传给innodb引擎,innodb引擎检查key值比较敏感造成的。


  • 修改binlog_format格式为mixed;登陆mysql,执行 set global binlog_format=MIXED;
  • 不要使用这类sql;



您的电子邮箱地址不会被公开。 必填项已用 * 标注