事物隔离级别和行日志格式设置不当导致故障案例

最近刚接手个新项目的测试平台采用了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: http://xxxxx/xxxxxx

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(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,那么会导致主从数据不一致。

时间: 2024-08-31 13:17:45

事物隔离级别和行日志格式设置不当导致故障案例的相关文章

memory_target设置不当导致数据库无法启动的问题

今天在做一个问题排查的时候碰到了另外一个有些"奇怪的"问题. 我们在测试库中已经禁用了SGA自动存储管理,结果在spfile文件里丢掉了shared_pool_size的配置 测试环境的参数类似下面的样子 sga_max_size                         big integer 12000M sga_target                             big integer 0 shared_pool_size                

MySQL 事物隔离级别

1.什么是事物: 访问并可能更新数据库的一个完整的程序执行单元(UNIT) 2.事物必须满足ACID特性:A,atomic,原子性,要么都提交,要么都失败,不能一部分成功,一部分失败.C,consistent,一致性,事物开始及结束后,数据的一致性约束没有被破坏I,isolation,隔离性,并发事物间相互不影响,互不干扰.D,durability,持久性,已经提交的事物对数据库所做的更新必须永久保存.即便发生崩溃,也不能被回滚或数据丢失. 3.事物中存在的问题:dirty read (脏读).

内存设置不当引发故障

  电脑在开机的时候,自检需要反复3遍才能通过. 出现这种故障,极有可能是内存在BIOS中的设置不当,引起的电脑不能正常运行. 电脑的内存容量增加,开机的时候内存自检时间延长,有时需要好几次检测,才能完成.这时,可以直接按[Esc]跳过检测.还可以在开机的时候进入BIOS中,选择"BIOS Features Setup"选项,将"Quick Power On SelfTest"设置为"Enabled",然后保存并退出.设置完毕后,系统会自动跳过内

CPU参数设置错误导致故障

  在CMOS中,如果CPU的电压或者频率设置的不正确,会导致CPU的电压偏低或者过高,影响CPU工作的稳定性和使用寿命. CPU超频是很容易电脑故障的,因为在超频后,CPU的逻辑元件硅晶片频率增高,在各个方面参数都会发生变化,特别是在发热增加导致温度远高于CPU的正常工作温度,电子的热迁移加速.如果产生的热量不能及时驱散,很容易引起芯片或者别的部件被烧毁,造成经济损失.

SQL Server事务隔离级别详解

SQL Server事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述      隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别.事务隔离级别总共有6个隔离级别:READ UNCOMMITTED(未提交读,读脏),相当于(NOLOCK)

SQL Server 事务隔离级别详解

原文:SQL Server 事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设计数据库事务级别 SQL 事务隔离级别 概述      隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别.事务隔离级别总共有6个隔离级别:READ UNCOMMITTED(未提交读,读脏),相当于(NOL

SQL Server 中的6种事务隔离级别简单总结

原文:SQL Server 中的6种事务隔离级别简单总结   本文出处:http://www.cnblogs.com/wy123/p/7218316.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)   数据库中的事物是具有原子性(Atomicity),一致性(Consistemcy),隔离性(Isolation),持久性(Durability)四个特征.在上述四个特性中的一致性和隔离性的实现中,是通过锁来实

MySQL的事务隔离级别和锁

MySQL的事务隔离级别:Read Uncommitted[读未提交数据]Read Committed[读已提交数据]Repeatable Read[可重读]Serializable[可串行化] 查看MySQL的事务隔离级别:默认.全局和会话事务隔离级别: SELECT @@tx_isolation SELECT @@global.tx_isolation; SELECT @@session.tx_isolation; mysql> select @@tx_isolation; +-------

PostgreSQL教程(九):事物隔离介绍_PostgreSQL

在SQL的标准中事物隔离级别分为以下四种:     1. 读未提交(Read uncommitted)     2. 读已提交(Read committed)     3. 可重复读(Repeatable read)     4. 可串行化(Serializable)     然而PostgreSQL在9.1之前的版本中只是实现了其中两种,即读已提交和可串行化,如果在实际应用中选择了另外两种,那么PostgreSQL将会自动向更严格的隔离级别调整.在PostgreSQL v9.1的版本中提供了三