|
0
发表于: 2009-04-13 00:09
1
MySQL 5.1 中 Innodb 的事务完整性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> select count(*) from test.test; +----------+ | count(*) | +----------+ | 1000000| +----------+ 1 row in set (1.71 sec) root@dc-6 : (none) 01:36:01> select count(*) from test.test; +----------+ | count(*) | +----------+ | 1000000| +----------+ 1 row in set (1.69 sec)我们再将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> select count(*) from offer1.test; +----------+ | count(*) | +----------+ | 887377 | +----------+ 1 row in set (1.66 sec) root@dc-6 : offer1 01:44:05> select count(*) from offer1.test; +----------+ | count(*) | +----------+ | 1000000| +----------+ 1 row in set (1.70 sec)Master 和 Slave 两端数据居然出现不一致,在 Master 端已经删除掉了部分数据,在 Slave 端却没有任何变化。执行deletetest.sh 脚本前后检查 Master 的 Binary Log(SHOW Master STATUS),没有任何变化。这个Bug 简直是太扯淡了,数据完全没有事务完整性可言了啊。 |
|
|---|---|
|
1
发表于: 2009-05-24 14:33
这个BUG是你测试出来的,怎么叫转呢
![]() 汇报另外一个BUG:mysql-5.1.31版本无法正常复制TRUNCATE TABLE 语句 在MASTER上执行了,SLAVE上的数据依然存在...... 另外说下,大数据量写入的情况,INSERT INTO tablename SELECT ......方式 可能会造成的延迟严重,我发布一个项目的时候,等了3分钟,还没看到数据,以为出问题了,就两边做,导致出现 主健冲突.... 大家还是要有耐心哦! |
|
|---|---|
|
2
发表于: 2009-05-24 14:56
另外一件事情,千万别让磁盘写慢了,否则会造成,线程无法kill掉,只有重新启动mysql
|
|
|---|---|
|
3
发表于: 2010-08-19 21:26
就算和你没有结局,我还是喜欢你。
我想忘记你,可做不到..... 其实你并不是完美得无可替代, 你永远是不懂我的心思 不知道我为什么会因为一件小事 就能开心一整天 也不知道我为什么会因为一句话 而难过好多天 不懂我的任性 我的乱发脾气 我的恨从哪里来? 为什么我总是有那么多脾气 总是那么斤斤计较 总是那么不懂事 其实所有的所有 只是因为爱你 心里全部都是你 你能够活在一个没有我的世界 而我却只能活在一个只有你的天空 谁让我先动了情 谁让我爱上了一个不爱我的人 所以在这场比赛里 我就注定是输家 但是我就是爱你爱得无可救药, 即使你的心里根本没有我的位置 然而,你知道吗? 这辈子最大的幸运就是认识你,而最大的不幸却是不能拥有你,可是你却不会遇到第2个像我这么爱你的人。 在错的时间遇上对的人是一场伤,在对的时间遇上错的人是一声叹息,在对的时间遇上对的人是一生的幸福,你是幸福的吗? 如果爱你是错,我情愿一错再错。选择你所爱的,然后爱你所选择的。 爱你,却不能与你长相厮守,这是一种痛苦,等你却不知道结局,这是一种无耐,但求此刻能拥有你,但求此生能与你在一起! 不再相见并不一定等于分离,不再通讯也不一定等于忘记,因为你的幸福和快乐,会是我一直的期盼。别把我忘了,请让我占据你心中唯一我的地盘,好吗? 爱你,却要无欲无求,好难!爱你却要偷偷摸摸,好累!爱你却让自己心碎,好惨!但竟然心甘情 愿,好傻! 想起你,我的心就有说不出的痛,你是否知道?我能感到你的痛因为你在我的心中,不知远方的你现在还好吗? 很爱你才会怕明天一切都更改,在乎你才会经不起任何小小的伤害。 如果有一天,当你想起有谁爱过你,那其中一定有我一个,如果有一天,没有人爱你了,那一定是我死了。 有一些人,有些感情,错过了一次,也许就会错错这整整的一生。 如果输家可以一直这样爱下去, 我甘愿成为一个输家,acdsee5.0免费下载, 然后, 一直这样爱下去,就算和你没有结局,我还是喜欢你....... 无怨无悔, 直至心灰意冷.... 不再提起。 |
|
|---|---|






