这篇文章主要介绍“分析MySQL中关于Bug的解决方法”,在日常操作中,相信很多人在分析MySQL中关于Bug的解决方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析MySQL中关于Bug的解决方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

故障

下面是commit

$gitshowa43f7d5a6130550619afad3fb513c98e00dc505ecommita43f7d5a6130550619afad3fb513c98e00dc505eAuthor:DaogangQu<bill.qu@oracle.com>Date:WedJan2009:25:362016+0800Bug#22130929GTID_NEXTANDBEGINBEHAVIORISDIFFERENTB/WBINLOGANDBINLOG-LESSSERVERProblem=======Whenbinlogisenabled,wedonotsavethegtidspecifiedbyGTID_NEXTintoGLOBAL@gtid_executedwhencommittinganemptytransactioncausedbya'BEGIN'command.ButwesavethegtidintoGLOBAL@gtid_executedinthecasewhenbinlogisdisabled.Fix===When@@SESSION.GTID_NEXT=='UUID:NUMBER',thecommand'BEGIN'causesanerror'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'insideanempty/anon-emptytransactionregardlessofbeingbinloglessornot,sinceitcausesanimplicitcommitlikeotherDDLs.AndwedonotsavethegtidspecifiedbyGTID_NEXTintoGLOBAL@gtid_executedinthecase.diff--gita/mysql-test/extra/binlog_tests/gtid_next_begin_caused_trx.testb/mysql-test/extra/binlog_tests/gtid_next_begin_caused_trx.testnewfilemode100644index00000000000..1459bcdf775---/dev/null+++b/mysql-test/extra/binlog_tests/gtid_next_begin_caused_trx.test@@-0,0+1,76@@+#====Purpose====+#+#When@@SESSION.GTID_NEXT=='UUID:NUMBER',verifythatthecommand+#'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anempty/anon-emptytransaction,sinceitcausesanimplicit+#commit.WedonotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+#====Implementation====+#+#1)Set@@SESSION.GTID_NEXT=='UUID:NUMBER'+#2)Executea'BEGIN'commandtostartatransaction.+#3)Executeanother'BEGIN'commandtocheckifitcausesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'+#insideanemptytransaction,andwedonotsavethegtid+#specifiedbyGTID_NEXTintoGLOBAL@gtid_executed.+#4)Executean'INSERT'statement.+#5)Executethethird'BEGIN'commandtocheckifitcausesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'+#insideanon-emptytransaction,andwedonotsavethegtid+#specifiedbyGTID_NEXTintoGLOBAL@gtid_executed.+#6)CheckthatwesavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedwhencommittingthetransaction.+#+#====References====+#+#Bug#22130929GTID_NEXTANDBEGINBEHAVIORISDIFFERENTB/WBINLOGANDBINLOG-LESSSERVER+#Caller:suite/binlog/t/binlog_gtid_next_begin_caused_trx.test+#Caller:t/no_binlog_gtid_next_begin_caused_trx.test+#++SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';+CREATETABLEt1(c1INT);+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2';+BEGIN;++--echo#+--echo#Checkthatthecommand'BEGIN'causesanerror+--echo#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+--echo#anemptytransaction,sinceitcausesanimplicitcommit.Andwe+--echo#donotsavethegtidspecifiedbyGTID_NEXTinto+--echo#GLOBAL@gtid_executedinthecase.+--echo#+--errorER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET+BEGIN;+--let$assert_text=Dosenotcommitgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2+--let$assert_cond="[SELECT@@GLOBAL.GTID_EXECUTED]"="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1"+--sourceinclude/assert.inc++INSERTINTOt1VALUES(1);+--echo#+--echo#Checkthatthecommand'BEGIN'causesanerror+--echo#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+--echo#anon-emptytransaction,sinceitcausesanimplicitcommit.And+--echo#wedonotsavethegtidspecifiedbyGTID_NEXTinto+--echo#GLOBAL@gtid_executedinthecase.+--echo#+--errorER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET+BEGIN;+--let$assert_text=Dosenotcommitgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2+--let$assert_cond="[SELECT@@GLOBAL.GTID_EXECUTED]"="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1"+--sourceinclude/assert.inc++--echo#+--echo#CheckthatwesavethegtidspecifiedbyGTID_NEXTinto+--echo#GLOBAL@gtid_executedwhencommittingthetransaction.+--echo#+COMMIT;+--let$assert_text=Committedgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2+--let$assert_cond="[SELECT@@GLOBAL.GTID_EXECUTED]"="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-2"+--sourceinclude/assert.inc++SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:3';+DROPTABLEt1;+diff--gita/mysql-test/r/no_binlog_gtid_next_begin_caused_trx.resultb/mysql-test/r/no_binlog_gtid_next_begin_caused_trx.resultnewfilemode100644index00000000000..44f6216c1b6---/dev/null+++b/mysql-test/r/no_binlog_gtid_next_begin_caused_trx.result@@-0,0+1,34@@+RESETMASTER;+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';+CREATETABLEt1(c1INT);+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2';+BEGIN;+#+#Checkthatthecommand'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anemptytransaction,sinceitcausesanimplicitcommit.Andwe+#donotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+BEGIN;+ERRORHY000:Cannotexecutestatementswithimplicitcommitinsideatransactionwhen@@SESSION.GTID_NEXT=='UUID:NUMBER'.+include/assert.inc[Dosenotcommitgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2]+INSERTINTOt1VALUES(1);+#+#Checkthatthecommand'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anon-emptytransaction,sinceitcausesanimplicitcommit.And+#wedonotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+BEGIN;+ERRORHY000:Cannotexecutestatementswithimplicitcommitinsideatransactionwhen@@SESSION.GTID_NEXT=='UUID:NUMBER'.+include/assert.inc[Dosenotcommitgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2]+#+#CheckthatwesavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedwhencommittingthetransaction.+#+COMMIT;+include/assert.inc[Committedgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2]+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:3';+DROPTABLEt1;diff--gita/mysql-test/suite/binlog/r/binlog_gtid_next_begin_caused_trx.resultb/mysql-test/suite/binlog/r/binlog_gtid_next_begin_caused_trx.resultnewfilemode100644index00000000000..44f6216c1b6---/dev/null+++b/mysql-test/suite/binlog/r/binlog_gtid_next_begin_caused_trx.result@@-0,0+1,34@@+RESETMASTER;+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';+CREATETABLEt1(c1INT);+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2';+BEGIN;+#+#Checkthatthecommand'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anemptytransaction,sinceitcausesanimplicitcommit.Andwe+#donotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+BEGIN;+ERRORHY000:Cannotexecutestatementswithimplicitcommitinsideatransactionwhen@@SESSION.GTID_NEXT=='UUID:NUMBER'.+include/assert.inc[Dosenotcommitgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2]+INSERTINTOt1VALUES(1);+#+#Checkthatthecommand'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anon-emptytransaction,sinceitcausesanimplicitcommit.And+#wedonotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+BEGIN;+ERRORHY000:Cannotexecutestatementswithimplicitcommitinsideatransactionwhen@@SESSION.GTID_NEXT=='UUID:NUMBER'.+include/assert.inc[Dosenotcommitgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2]+#+#CheckthatwesavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedwhencommittingthetransaction.+#+COMMIT;+include/assert.inc[Committedgtidaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2]+SETGTID_NEXT='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:3';+DROPTABLEt1;diff--gita/mysql-test/suite/binlog/t/binlog_gtid_next_begin_caused_trx.testb/mysql-test/suite/binlog/t/binlog_gtid_next_begin_caused_trx.testnewfilemode100644index00000000000..dc12cb95fa8---/dev/null+++b/mysql-test/suite/binlog/t/binlog_gtid_next_begin_caused_trx.test@@-0,0+1,30@@+#====Purpose====+#+#Whenbinlogisenabledand@@SESSION.GTID_NEXT=='UUID:NUMBER',+#verifythatthecommand'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anempty/anon-emptytransaction,sinceitcausesanimplicit+#commit.WedonotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+#====Implementation====+#+#Seeextra/binlog_tests/gtid_next_begin_caused_trx.test+#+#====References====+#+#Bug#22130929GTID_NEXTANDBEGINBEHAVIORISDIFFERENTB/WBINLOGANDBINLOG-LESSSERVER+#++#Testinthisfileisbinlogformatagnostic,thusnoneed+#torerunthemforeveryformat.+--sourceinclude/have_binlog_format_row.inc+--sourceinclude/have_gtid.inc+#Testisnotrequiredtorunagainstembeddedserver+--sourceinclude/not_embedded.inc++#Makesurethetestisrepeatable+RESETMASTER;++--sourceextra/binlog_tests/gtid_next_begin_caused_trx.test+diff--gita/mysql-test/t/no_binlog_gtid_next_begin_caused_trx-master.optb/mysql-test/t/no_binlog_gtid_next_begin_caused_trx-master.optnewfilemode100644index00000000000..f3fd62da9b7---/dev/null+++b/mysql-test/t/no_binlog_gtid_next_begin_caused_trx-master.opt@@-0,0+1,2@@+--gtid_mode=ON+--enforce_gtid_consistencydiff--gita/mysql-test/t/no_binlog_gtid_next_begin_caused_trx.testb/mysql-test/t/no_binlog_gtid_next_begin_caused_trx.testnewfilemode100644index00000000000..71f9833827d---/dev/null+++b/mysql-test/t/no_binlog_gtid_next_begin_caused_trx.test@@-0,0+1,28@@+#====Purpose====+#+#Whenbinlogisdisabledand@@SESSION.GTID_NEXT=='UUID:NUMBER',+#verifythatthecommand'BEGIN'causesanerror+#'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'inside+#anempty/anon-emptytransaction,sinceitcausesanimplicit+#commit.WedonotsavethegtidspecifiedbyGTID_NEXTinto+#GLOBAL@gtid_executedinthecase.+#+#====Implementation====+#+#Seeextra/binlog_tests/gtid_next_begin_caused_trx.test+#+#====References====+#+#Bug#22130929GTID_NEXTANDBEGINBEHAVIORISDIFFERENTB/WBINLOGANDBINLOG-LESSSERVER+#+++#Testisnotrequiredtorunagainstembeddedserver+--sourceinclude/not_embedded.inc+#Shouldbetestedagainst"binlogdisabled"server+--sourceinclude/not_log_bin.inc++#Makesurethetestisrepeatable+RESETMASTER;++--sourceextra/binlog_tests/gtid_next_begin_caused_trx.testdiff--gita/sql/rpl_gtid_execution.ccb/sql/rpl_gtid_execution.ccindexec36772e8c9..65161e2ca97100644---a/sql/rpl_gtid_execution.cc+++b/sql/rpl_gtid_execution.cc@@-1,4+1,4@@-/*Copyright(c)2011,2015,Oracleand/oritsaffiliates.Allrightsreserved.+/*Copyright(c)2011,2016,Oracleand/oritsaffiliates.Allrightsreserved.Thisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseas@@-453,7+453,8@@enum_gtid_statement_statusgtid_pre_statement_checks(THD*thd)DBUG_ASSERT(gtid_next->type!=AUTOMATIC_GROUP||thd->owned_gtid.is_empty());-if(stmt_causes_implicit_commit(thd,CF_IMPLICIT_COMMIT_BEGIN)&&+if((stmt_causes_implicit_commit(thd,CF_IMPLICIT_COMMIT_BEGIN)||+thd->lex->sql_command==SQLCOM_BEGIN)&&thd->in_active_multi_stmt_transaction()&&gtid_next->type==GTID_GROUP){

到此,关于“分析MySQL中关于Bug的解决方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!