最近刚接手个新项目的测试平台采用了spring的事务机制,在用户认证登录时总是提示认证超时,于时查看相应的各应用服务器日志,发现报了异常:
binary logging not possible. message: transaction level 'read-committed' in innodb is not safe for binlog mode 'statement'...
......
前端某台应用服务器报如下错:
{returnno:0,listfield:[{usercode:admin,newpassword:,sessionkey:,password:670b14728ad9902aecba32e22fa4f6bd,ip:192.168.1.75}],returnobject:null,commondid:8000}
java.io.ioexception: server returned http response code: 500 for url:
at sun.net.(httpurlconnection.java:1313)
其实通过最上面那条错误可以判断问题出在哪了.由于innodb 和 binlog不兼容引起的...mysql推荐:当设置隔离级别为read-commited必须设置行日志格式为row,网站空间,现在mysql官方也明确说明statement 这个已经不建议用了!
当前系统的事务隔离级别是: read-committed,行日志格式是:statement
这里可以有两种解决办法:
一种是提升事物隔离级别为 repeatable-read,这是mysql默认的事务隔离级别;
mysql> set global transaction isolation level repeatable read;
一种是保持当前的事务隔离级别,香港服务器租用,修改行日志格式为 mixed 或 row.
这里修改配置文件:
binlog_format = row
#binlog_format = mixed
重启服务
有个特别要注意的问题,如果 binlog_format 为 mixed,服务器空间,而且使用的是默认隔离级别repeatable-read,那么会导致主从数据不一致。
参考贺总博客:
本文出自 “->” 博客,请务必保留此出处