데이터 베이스 MySQL 튜토리얼 MySQL5.1 中Innodb事务完整性Bug

MySQL5.1 中Innodb事务完整性Bug

Jun 07, 2016 pm 04:31 PM
bug innodb 사무 진실성

今天和 51.com 的 MySQL DBA 景春同学一起遇到了个 MySQL 非常扯淡的Bug:在 5.1 版本中,Innodb 存储引擎如果使用autocommit=0的情况下,单条SQL在执行过程中如果异常中断的话,事务完整性可能无法保证,不论是STATEMENT还是MIXED的binlog_format,都存在相

今天和 51.com 的 MySQL DBA 景春同学一起遇到了个 MySQL 非常扯淡的Bug:在 5.1 版本中,Innodb 存储引擎如果使用autocommit=0的情况下,单条SQL在执行过程中如果异常中断的话,事务完整性可能无法保证,不论是STATEMENT还是MIXED的binlog_format,都存在相同的问题,可以重现,屡试不爽。
测试环境如下:
OS:SunOS 5.10 Generic_137138-09
DB:MySQL 5.1.31/32-log Source distribution
binlog_format:MIXED/STATEMENT
tx_isolation:REPEATABLE-READ

测试脚本如下:

[root@dc-5 /tmp]#cat deletetest.sh
#/bin/sh
mysql -uadmin -h127.0.0.1 -pxxx -e"set autocommit=0;delete from test.test;"
[root@dc-5 /tmp]#cat killtest.sh
#/bin/sh
mysqladmin -uroot processlist |grep "admin"|awk '{print $2}'|xargs mysqladmin -uroot kill

将删除的脚本放到后台执行,然后执行kill脚本:

[root@dc-5 /tmp]#time ./deletetest.sh &
[1] 6708
[root@dc-5 /tmp]#./killtest.sh
ERROR 1053 (08S01) at line 1: Server shutdown in progress

real    0m2.901s
user    0m0.007s
sys     0m0.007s
[root@dc-5 /tmp]#
[1]+  Exit 1                  time ./deletetest.sh

到Master 和 Slave 两端分别检查数据,看上去很正常:

root@dc-5 : (none)01:35:43> selectcount(*)fromtest.test;
+----------+
|
count(*) |
+----------+
|
1000000|
+----------+
1rowinset(1.71sec)
 
root@dc-6 : (none)01:36:01> selectcount(*)fromtest.test;
+----------+
|
count(*) |
+----------+
|
1000000|
+----------+
1rowinset(1.69sec)

我们再将set autocommit=0拿掉试试看,也就是允许系统自动提交:

[root@dc-5 /tmp]#cat deletetest.sh
#/bin/sh
mysql -uadmin -h127.0.0.1 -pxxx -e"delete from offer1.test;"
[root@dc-5 /tmp]#time ./deletetest.sh &
[1] 6722
[root@dc-5 /tmp]#./killtest.sh
[root@dc-5 /tmp]#ERROR 1053 (08S01) at line 1: Server shutdown in progress

real    0m2.462s
user    0m0.006s
sys     0m0.007s

[1]+  Exit 1                  time ./deletetest.sh

再检查 Master 和 Slave 两端的数据:

root@dc-5 : (none)01:40:30> selectcount(*)fromoffer1.test;
+----------+
|
count(*) |
+----------+
887377 |
+----------+
1rowinset(1.66sec)
root@dc-6 : offer101:44:05selectcount(*)fromoffer1.test;
+----------+
|
count(*) |
+----------+
|
1000000|
+----------+
1rowinset(1.70sec)

Master 和 Slave 两端数据居然出现不一致,在 Master 端已经删除掉了部分数据,在 Slave 端却没有任何变化。执行 deletetest.sh 脚本前后检查 Master 的 Binary Log(SHOW Master STATUS),没有任何变化。这个 Bug 简直是太扯淡了,数据完全没有事务完整性可言了啊。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

게임버그는 무슨 뜻인가요? 게임버그는 무슨 뜻인가요? Feb 18, 2024 am 11:30 AM

게임 버그란 무엇을 의미합니까? 게임을 플레이하는 동안 캐릭터가 멈추거나 작업을 계속할 수 없거나 화면이 깜박이는 등 예상치 못한 오류나 문제가 자주 발생합니다. 이러한 비정상적인 현상을 게임 버그, 즉 게임의 결함이나 오류라고 합니다. 이 기사에서는 게임 버그가 무엇을 의미하는지, 그리고 버그가 플레이어와 개발자에게 미치는 영향을 살펴보겠습니다. 게임 버그란 게임 개발이나 운영 과정에서 발생하는 오류로 인해 게임이 정상적으로 실행되지 않거나 예상치 못한 동작을 하는 현상을 말합니다. 이러한 오류는 다음으로 인해 발생할 수 있습니다.

Apple iOS18 버그 요약 Apple iOS18 버그 요약 Jun 14, 2024 pm 01:48 PM

Apple의 WWDC 컨퍼런스 2024가 성공적으로 마무리되면서 macos15가 발표되었을 뿐만 아니라 Apple의 새로운 iOS18 시스템 업데이트가 가장 큰 관심을 끌었습니다. Apple iOS18을 업그레이드하려면 최신 버전의 Apple iOS18에 어떤 종류의 버그가 있습니까? 실제 사용 평가를 마친 후 Apple iOS 18 버그를 요약하면 다음과 같습니다. 현재 많은 아이폰 사용자들이 iOS18로의 업그레이드를 서두르고 있지만, 각종 시스템 버그들이 사람들을 불편하게 만들고 있다. 일부 블로거는 "버그가 너무 많기 때문에" iOS18로 업그레이드할 때 주의해야 한다고 말했습니다. 블로거는 귀하의 iPhone이

잠금 대기 시간 초과; 트랜잭션 다시 시작 - MySQL 오류 해결 방법: 트랜잭션 대기 시간 초과 잠금 대기 시간 초과; 트랜잭션 다시 시작 - MySQL 오류 해결 방법: 트랜잭션 대기 시간 초과 Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction - MySQL 오류 해결 방법: 트랜잭션 대기 시간 초과 MySQL 데이터베이스를 사용할 때 다음과 같은 일반적인 오류가 발생할 수 있습니다. Lockwaittimeoutexceeded;tryrestartingtransaction 이 오류는 트랜잭션 대기 시간이 초과되었음을 나타냅니다. 이 오류는 일반적으로 다음과 같은 경우에 발생합니다.

mysql innodb가 뭐야? mysql innodb가 뭐야? Apr 14, 2023 am 10:19 AM

InnoDB는 MySQL의 데이터베이스 엔진 중 하나이며 현재 MySQL AB의 바이너리 릴리스 표준 중 하나입니다. InnoDB는 이중 트랙 인증 시스템을 채택합니다. 하나는 GPL 인증이고 다른 하나는 독점 소프트웨어입니다. 권한 부여. InnoDB는 트랜잭션 데이터베이스에 선호되는 엔진이며 트랜잭션 보안 테이블(ACID)을 지원합니다. InnoDB는 최대 범위의 동시성을 지원할 수 있는 행 수준 잠금을 지원합니다.

MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 Mar 16, 2024 am 11:33 AM

MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 MySQL 데이터베이스에서 트랜잭션은 모든 실행이 성공하거나 모든 실행이 실패하여 데이터의 일관성과 무결성을 보장합니다. MySQL에서는 트랜잭션을 자동 제출과 수동 제출로 나눌 수 있는데, 차이점은 트랜잭션 제출 시기와 트랜잭션에 대한 제어 범위에 있습니다. 다음에서는 자동 제출과 수동 제출의 차이점을 자세히 소개하고 설명할 특정 코드 예제를 제공합니다. 1. 표시되지 않는 경우 MySQL에서 자동으로 제출

Windows 11 메모리 무결성이 꺼졌습니다. 어떻게 해결하나요? Windows 11 메모리 무결성이 꺼졌습니다. 어떻게 해결하나요? Mar 08, 2024 pm 02:06 PM

제목: Windows 11 메모리 무결성이 꺼졌습니다. 어떻게 해결하나요? Windows 11이 출시되면서 많은 사용자가 새로운 시스템으로 업그레이드했습니다. 그러나 일부 사용자는 Windows 11을 사용할 때 메모리 무결성이 꺼지는 문제에 직면할 수 있으며, 이는 컴퓨터의 성능과 안정성에 영향을 미칩니다. 이 문서에서는 Windows 11에서 메모리 무결성을 끄는 문제에 대해 설명하고 몇 가지 해결 방법과 제안 사항을 제공합니다. 1. Windows 11에서 메모리 무결성 종료 문제의 원인

MySQL이 바이너리 콘텐츠에서 InnoDB 행 형식을 보는 방법 MySQL이 바이너리 콘텐츠에서 InnoDB 행 형식을 보는 방법 Jun 03, 2023 am 09:55 AM

InnoDB는 디스크의 테이블에 데이터를 저장하는 스토리지 엔진이므로 종료하고 다시 시작한 후에도 데이터가 계속 존재합니다. 실제 데이터 처리 과정은 메모리에서 일어나므로 디스크에 있는 데이터를 메모리에 로드해야 하며, 쓰기나 수정 요청을 처리하는 경우에도 메모리에 있는 내용을 디스크에 새로 고쳐야 합니다. 그리고 우리는 디스크를 읽고 쓰는 속도가 매우 느리다는 것을 알고 있습니다. 이는 메모리에서 읽고 쓰는 것과는 몇 배 정도 다릅니다. 따라서 테이블에서 특정 레코드를 얻으려면 InnoDB 스토리지 엔진이 읽어야 합니다. 디스크의 레코드가 하나씩? InnoDB가 채택한 방식은 데이터를 여러 페이지로 나누고, 디스크와 메모리 간 상호 작용의 기본 단위로 페이지를 사용하는 것입니다. InnoDB의 페이지 크기는 일반적으로 16입니다.

시스템 수하물은 무엇을 의미하나요? 시스템 수하물은 무엇을 의미하나요? Nov 09, 2022 pm 02:40 PM

시스템 버그는 시스템 버그를 말하는데, 버그의 본래 의미는 "버그"이며, 이제는 시스템 보안 정책에 결함이 있어 위험이 있다는 뜻으로 사용됩니다. 넓은 의미에서 공격자가 허가 없이 접근할 수 있는 버그는 인터넷에서 다양한 분야에서 발생하는 허점이나 결함을 설명하는 데 사용될 수 있습니다.

See all articles