From 650ffcd3a081f0bf4e3b7de93fac72c1b67284e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 1 Feb 2017 15:47:33 +0200 Subject: [PATCH] Extend the innodb.log_corruption test. Remove the dependency on unzip. Instead, generate the InnoDB files with perl. log_block_checksum_is_ok(): Correct the error message. recv_scan_log_recs(): Remove the duplicated error message for log block checksum mismatch. innobase_start_or_create_for_mysql(): If the server is in read-only mode or if innodb_force_recovery>=3, do not try to modify the system tablespace. (If the doublewrite buffer or the non-core system tables do not exist, do not try to create them.) innodb_shutdown(): Relax a debug assertion. If the system tablespace did not contain a doublewrite buffer and if we started up in innodb_read_only mode or with innodb_force_recovery>=3, it will not be created. dict_create_or_check_sys_tablespace(): Set the flag srv_sys_tablespaces_open when the tables exist. --- mysql-test/include/have_unzip.inc | 3 - mysql-test/suite.pm | 2 - .../suite/innodb/r/log_corruption.result | 4 +- .../suite/innodb/std_data/log_corruption.zip | Bin 94694 -> 0 bytes .../suite/innodb/std_data/log_corruption0.zip | Bin 1211 -> 0 bytes .../suite/innodb/std_data/log_corruption1.zip | Bin 1257 -> 0 bytes .../suite/innodb/std_data/log_corruption2.zip | Bin 1304 -> 0 bytes .../suite/innodb/std_data/log_corruption3.zip | Bin 1304 -> 0 bytes .../suite/innodb/std_data/log_corruption4.zip | Bin 1308 -> 0 bytes .../innodb/std_data/log_corruption4a.zip | Bin 1310 -> 0 bytes .../suite/innodb/std_data/log_corruption5.zip | Bin 1308 -> 0 bytes .../suite/innodb/std_data/log_corruption6.zip | Bin 1311 -> 0 bytes mysql-test/suite/innodb/t/log_corruption.test | 234 +++++++++++++++--- storage/innobase/dict/dict0crea.cc | 20 +- storage/innobase/log/log0recv.cc | 29 +-- storage/innobase/srv/srv0start.cc | 35 +-- 16 files changed, 244 insertions(+), 83 deletions(-) delete mode 100644 mysql-test/include/have_unzip.inc delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption0.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption1.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption2.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption3.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption4.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption4a.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption5.zip delete mode 100644 mysql-test/suite/innodb/std_data/log_corruption6.zip diff --git a/mysql-test/include/have_unzip.inc b/mysql-test/include/have_unzip.inc deleted file mode 100644 index a3308524679..00000000000 --- a/mysql-test/include/have_unzip.inc +++ /dev/null @@ -1,3 +0,0 @@ -# -# empty. the real check happens in suite.pm -# diff --git a/mysql-test/suite.pm b/mysql-test/suite.pm index 134a0d6d438..f501e610e53 100644 --- a/mysql-test/suite.pm +++ b/mysql-test/suite.pm @@ -68,8 +68,6 @@ sub skip_combinations { unless $::mysqld_variables{'version-ssl-library'} =~ /OpenSSL (\S+)/ and $1 ge "1.0.1d"; - $skip{'include/have_unzip.inc'} = 'no unzip executable' unless `unzip`; - %skip; } diff --git a/mysql-test/suite/innodb/r/log_corruption.result b/mysql-test/suite/innodb/r/log_corruption.result index 64a8824189f..18029f58d36 100644 --- a/mysql-test/suite/innodb/r/log_corruption.result +++ b/mysql-test/suite/innodb/r/log_corruption.result @@ -11,7 +11,9 @@ # Test a corrupted MLOG_FILE_NAME record. # valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2 # Test a corrupted MLOG_FILE_NAME record. -# valid header, invalid checkpoint 1, valid checkpoint 2 +# valid header, invalid checkpoint 1, valid checkpoint 2, invalid block +# valid header, invalid checkpoint 1, valid checkpoint 2, invalid log record +ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1 diff --git a/mysql-test/suite/innodb/std_data/log_corruption.zip b/mysql-test/suite/innodb/std_data/log_corruption.zip deleted file mode 100644 index 6f126c2edf0e70634b468b6bad53633e1a127d22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94694 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 PKthZ_XbGfqz(o`QQjt1H diff --git a/mysql-test/suite/innodb/std_data/log_corruption1.zip b/mysql-test/suite/innodb/std_data/log_corruption1.zip deleted file mode 100644 index 35a02adaa6db6c1805ea49cd1fbf974796af5f58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1257 zcmWIWW@Zs#U|`^2@K=;`*YZ4gw~z(MWe{NC29lXc@j3bFX_+~x25+x!@~ diff --git a/mysql-test/suite/innodb/std_data/log_corruption2.zip b/mysql-test/suite/innodb/std_data/log_corruption2.zip deleted file mode 100644 index 4e4180ac4a31d7dd963241584c3becde4627b5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1304 zcmWIWW@Zs#U|`^2Xi$}NU*Hg)wtxl5We{NC29lXc@j3bFX_+~x25+w#dNBtIG(6lm zQDdWL_GXSUxdY5kgr)^H>Al!D;qKe;ZjotbW^xCE1Z=w0H+*5K>^yiZE|T;9bsnFu z;l`HFW#Zks&+eERGhIA2>-C~FvofzvS-Hx;%S1oz^3SU&Vd9}#O=}D4e_Z+((Ia-a z+`Rqy)59NQ@5?gmU)#O6Q0C~bcgN4YOxs+?wEphnx9)G|EkC{O zoq4~#NyV-D_q!QEjvoc1Aut*OBPRqJ-fm$E@MdI^W5!*S!9rt0BZ!4mumyOtvVnvc MfzT32p9GhG04y7C1^@s6 diff --git a/mysql-test/suite/innodb/std_data/log_corruption3.zip b/mysql-test/suite/innodb/std_data/log_corruption3.zip deleted file mode 100644 index 2337c81a80be9d91138f115b0996e0d55b3f1849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1304 zcmWIWW@Zs#U|`^2*rqJ!t~X=a*99y| z!;B3NS)_%n-r6>pZ`kDGR3Ln3{s!-UF`0(8W2bJ-Ybg#WWb*b`P}sQf`WnUerjvcX zh8hcA?9hLEGts83y;9$QveD`8Rq-K}TBlCy^llEU|8qfhYUIRK4>Z=S&x^0uxwSdW zWwWTf;O%_VrGKT%pReA2zVi9bcYF=^&3Z4--qG>*ZvU~biJR-0PQQHg($??Y<%FPX zvyaPX?VFSPDi7rLQ7{?;qaiSYLg0bLTZRB{MkYCC+(j8II5sqbSV#q1fHx}}NQe;# LErIk&aQO!Sz;kUU diff --git a/mysql-test/suite/innodb/std_data/log_corruption4.zip b/mysql-test/suite/innodb/std_data/log_corruption4.zip deleted file mode 100644 index 86002d7d42a9bc013d7881798e051dfe28e734ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcmWIWW@Zs#U|`^2IHw}#-e0V3w1fr7We{NC29lXc@j3bFX_+~x25+w#`Y{CxG(22r zn6cp@i?p!SOIrqB)2XUbO0!?s9n!N6DqxV7*3PaL&KA~Bc*<$h8o1#T!xPC*wP*ME zd=3Asv`AF??$@$AJ?l@OHqw2yXw59ot5a64^6xg$Pn-O+#AbE3mg&K`iue6;|8;h~ zKKFj{-IEhO>(7ev98-ey23Z1EXLx1V%$(1cks2|N8;nj7)OOxQjDbXl!T%v5*S40B=?{ PkPssfS_0{_;4%;Z+WTw1 diff --git a/mysql-test/suite/innodb/std_data/log_corruption4a.zip b/mysql-test/suite/innodb/std_data/log_corruption4a.zip deleted file mode 100644 index 6d072f3029fece328f659bfa7b1d2fe22d00a6a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1310 zcmWIWW@Zs#U|`^2IF+m6K3i|!mt`zKE`tCAH;~LsiqFYUPs_|nHF$e{vTv_r?4dbMPZ-OmYh4~NgCGU^_ zd2Zhq|NESZR}O_$ZHEMm`JUzMKa+yQ!%fHXt#pv<;ZFa5fxx?S?UEj6)?0xkQRsa8d zkbQNy!dU6_1A;RShN6pV(zXb6m;5SX(pKERuiNsbwJfd&hW4UHfcQt=kx S&B_K6Vgy1h?+ diff --git a/mysql-test/suite/innodb/std_data/log_corruption5.zip b/mysql-test/suite/innodb/std_data/log_corruption5.zip deleted file mode 100644 index bbf0238efc993e3eae7d692c12013d3c8978b9ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcmWIWW@Zs#U|`^2c(GRA-Ti$5+Y%NamqCDm8%Sm*#pmRwr)B1(8oa$~=*JW&(C~1f z;jDzioMviem#P`0v$VZLnr6SSJEUhDRKOrzon0-QEo93uSNwyB+rd-J6Vgw7H~nmM zHU4aOM_5kDwA+Q|J9O8dHd)=hDa$Q1c-bmD?Mqu`^ei)P_KXc#$@%TjuIis((l17C ztCw$o%VYUJ=>LzeKVLsAnYcSy{NAp;q3_rf=2yzZ9`Ve1SNpnV_s^d!anJg{&o3;P zdTg^*zMSyjj^m OLX1FY38c@0%Rm6UUTix6 diff --git a/mysql-test/suite/innodb/std_data/log_corruption6.zip b/mysql-test/suite/innodb/std_data/log_corruption6.zip deleted file mode 100644 index 04dd687e7c9324b6bcb6288deb939163ec9d3c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1311 zcmWIWW@Zs#U|`^2=&sRlSI)m5vYZ9TWe{NC29lXc@j3bFX_+~x25&DL`Y{CxG(22r zIAaa3dV;5p?i(H5B@4E0PMNx5>hfy#Z0;3@?f", "$ENV{bugdir}/ib_buffer_pool"; +close OUT or die; + +# Create a dummy system tablespace file using the default innodb_page_size=16k +die unless open OUT, ">", "$ENV{bugdir}/ibdata1"; +binmode OUT; + +# Tablespace header page with valid FSP_SIZE=768 pages. +# Also, write a dummy FSEG_MAGIC_N at offset 60 to keep fseg_inode_try_get() +# happy when fseg_n_reserved_pages() is following an invalid pointer +# from the all-zero change buffer header page (page 3). +print OUT pack("Nx[42]Nx[10]Nx[16312]Nx[4]", + 0xdeadbeef, # checksum + 768, # FSP_PAGE_SIZE + 97937874, # FSEG_MAGIC_N + 0xdeadbeef); # checksum +# Dummy pages 1..6. +print OUT chr(0) x (6 * 16384); +# Dictionary header page. +print OUT pack("NNx[62]Nx[8]Nx[16290]Nx[4]", + 0xdeadbeef, # checksum + 7, # FIL_PAGE_OFFSET + 8, # DICT_HDR_TABLES + 9, # DICT_HDR_INDEXES + 0xdeadbeef); # checksum + +# Empty SYS_TABLES page (page 8). +print OUT pack("NNNNx[8]nx[12]nnx[31]Cx[20]", + 0xdeadbeef, # checksum + 8, # FIL_PAGE_OFFSET + ~0, ~0, # FIL_PAGE_PREV, FIL_PAGE_NEXT + 17855, # FIL_PAGE_TYPE == FIL_PAGE_INDEX + 2, # PAGE_N_DIR_SLOTS + 124, # PAGE_HEAP_TOP + 1); # PAGE_INDEX_ID == DICT_TABLES_ID +print OUT pack("nxnn", 0x801, 3, 116), "infimum"; +print OUT pack("xnxnxx", 0x901, 0x803), "supremum"; +print OUT pack("x[16248]nnNx[4]", 116, 101, 0xdeadbeef); + +# Empty SYS_INDEXES page (page 9). +print OUT pack("NNNNx[8]nx[12]nnx[31]Cx[20]", + 0xdeadbeef, # checksum + 9, # FIL_PAGE_OFFSET + ~0, ~0, # FIL_PAGE_PREV, FIL_PAGE_NEXT + 17855, # FIL_PAGE_TYPE == FIL_PAGE_INDEX + 2, # PAGE_N_DIR_SLOTS + 124, # PAGE_HEAP_TOP + 3); # PAGE_INDEX_ID == DICT_INDEXES_ID + +print OUT pack("nxnn", 0x801, 3, 116), "infimum"; +print OUT pack("xnxnxx", 0x901, 0x803), "supremum"; +print OUT pack("x[16248]nnNx[4]", 116, 101, 0xdeadbeef); +print OUT chr(0) x (759 * 16384); +close OUT or die; + +# Create a dummy second redo log file +die unless open OUT, ">", "$ENV{bugdir}/ib_logfile1"; +binmode OUT; +print OUT chr(0) x 1048576; +close OUT or die; + +# Create a redo log from before MySQL 5.7.9 +die unless open OUT, ">", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +print OUT pack("x[9]nx[5]", 0x1286), " ", chr(0) x 492; +print OUT pack("x[13]nCNnxxNNx[256]", 0x1286, 12, 0x80c, 0xf0, ~0, ~0); +print OUT pack("H*x[1240]", "590DBAACFE922582"); +print OUT pack("H*x[5]", "800009440022000c0000000138"); +print OUT pack("H*x[475]H*", "12860cb7809781e80006626f677573", "089C0ADA"); +print OUT chr(0) x 1046016; +close OUT or die; EOF --echo # redo log from before MySQL 5.7.9 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption.zip -d $bugdir > $SEARCH_FILE --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log was created before MySQL 5\\.7\\.9\\.; --source include/search_pattern_in_file.inc --echo # redo log from before MySQL 5.7.9, with corrupted log checkpoint ---remove_file $bugdir/ib_logfile0 ---copy_file $bugdir/ib_logfile1 $bugdir/ib_logfile0 +--move_file $bugdir/ib_logfile0 $bugdir/ib_logfile +--copy_file $bugdir/ib_logfile1 $bugdir/ib_logfile0 --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log was created before MySQL 5\\.7\\.9, and we did not find a valid checkpoint; --source include/search_pattern_in_file.inc +let SEARCH_PATTERN=Plugin 'InnoDB' registration as a STORAGE ENGINE failed; +--source include/search_pattern_in_file.inc +let SEARCH_PATTERN=Unknown/unsupported storage engine: InnoDB; +--source include/search_pattern_in_file.inc --echo # redo log from before MySQL 5.7.9, with corrupted log block --remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption0.zip -d $bugdir > $SEARCH_FILE +--move_file $bugdir/ib_logfile $bugdir/ib_logfile0 +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +die unless seek(OUT, 0x800, 0); +print OUT pack("Nx[508]", 0xc0deba5e); +close OUT or die; +EOF + --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log was created before MySQL 5\\.7\\.9, and it appears corrupted; --source include/search_pattern_in_file.inc --echo # redo log from "after" MySQL 5.7.9, but with invalid header checksum ---remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption1.zip -d $bugdir > $SEARCH_FILE +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +print OUT pack("N",2); +close OUT or die; +EOF --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Invalid redo log header checksum; --source include/search_pattern_in_file.inc --echo # distant future redo log format, with valid header checksum ---remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption2.zip -d $bugdir > $SEARCH_FILE +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +print OUT pack("Nx[5]nx[5]", ~0, 0x1286); +print OUT "malicious intentions, or perhaps not"; +print OUT pack("x[456]N", 0x8a1bb475); +close OUT or die; +EOF --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Unsupported redo log format. The redo log was created with malicious intentions, or perhaps\. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html; --source include/search_pattern_in_file.inc --echo # valid header, but old-format checkpoint blocks ---remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption3.zip -d $bugdir > $SEARCH_FILE +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +# header block +print OUT pack("Nx[5]nx[5]", 1, 0x1286); +print OUT "malicious intentions, or perhaps not"; +print OUT pack("x[456]N", 0xd42d53a2); +# old-format checkpoint block 1 +print OUT pack("x[13]nCNnxxNNx[256]", 0x1286, 12, 0x80c, 0xf0, ~0, ~0); +print OUT pack("H*x[1240]", "590DBAACFE922582"); +print OUT pack("H*x[5]", "800009440022000c0000000138"); +print OUT pack("H*x[475]H*", "12860cb7809781e80006626f677573", "089C0ADA"); +close OUT or die; +EOF --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: No valid checkpoint found .corrupted redo log; --source include/search_pattern_in_file.inc --echo # valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2, invalid block checksum ---remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption4.zip -d $bugdir > $SEARCH_FILE +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +die unless seek(OUT, 0x210, 0); +print OUT pack("NNx[264]", 0, 0x80c); +print OUT pack("NNx[212]N", 0x590dbaac, 0xfe922582, 0xc72d49c4); +close OUT or die; +EOF # Anything below innodb_force_recovery=6 must find a valid redo log. # Missing tablespace files are tolerated already with innodb_force_recovery=1. --error 1 --exec $MYSQLD $args --innodb-force-recovery=5 -let SEARCH_PATTERN=InnoDB: Log block 2372 at lsn 1213952 has valid header, but checksum field contains 144444122, should be 3362026715; +let SEARCH_PATTERN=InnoDB: Invalid log block checksum. block: 2372 checkpoint no: 1 expected: 3362026715 found: 144444122; --source include/search_pattern_in_file.inc let SEARCH_PATTERN=InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 1213964 and the end 1213952\.; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=Plugin 'InnoDB' registration as a STORAGE ENGINE failed; ---source include/search_pattern_in_file.inc --echo # --innodb-force-recovery=6 (skip the entire redo log) ---error 1 ---exec $MYSQLD $args --innodb-force-recovery=6 -let SEARCH_PATTERN=InnoDB: Cannot create sys_virtual system tables. running in read-only mode; +--error 2 +--exec $MYSQLD $args --innodb-force-recovery=6 --unknown-option +--let SEARCH_PATTERN=\\[Note\\] InnoDB: .* started; log sequence number 0 +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=\\[ERROR\\] Aborting --source include/search_pattern_in_file.inc --echo # valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2, invalid block number ---remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption4a.zip -d $bugdir > $SEARCH_FILE +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +# header block +print OUT pack("Nx[5]nx[5]", 1, 0x1286); +print OUT "malicious intentions, or perhaps not"; +print OUT pack("x[456]N", 0xd42d53a2); +# checkpoint page 1 and all-zero checkpoint 2 +print OUT pack("x[13]nCNNx[264]", 0x1286, 12, 0, 0x80c); +print OUT pack("H*x[212]Nx[1024]", "590DBAACFE922582", 0xc72d49c4); +# redo log data +print OUT pack("H*x[5]", "C0DEBA5E0022000c0000000138"); +print OUT pack("H*x[475]H*", "12860cb7809781e80006626f677573", "089C0ADA"); +EOF +--copy_file $bugdir/ib_logfile0 $bugdir/ib_logfile # Anything below innodb_force_recovery=6 must find a valid redo log. # Missing tablespace files are tolerated already with innodb_force_recovery=1. --error 1 --exec $MYSQLD $args --innodb-force-recovery=5 let SEARCH_PATTERN=InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 1213964 and the end 1213952\.; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=Plugin 'InnoDB' registration as a STORAGE ENGINE failed; ---source include/search_pattern_in_file.inc --echo # --innodb-force-recovery=6 (skip the entire redo log) ---error 1 ---exec $MYSQLD $args --innodb-force-recovery=6 -let SEARCH_PATTERN=InnoDB: Cannot create sys_virtual system tables. running in read-only mode; ---source include/search_pattern_in_file.inc +--error 2 +--exec $MYSQLD $args --innodb-force-recovery=6 --unknown-option --echo # Test a corrupted MLOG_FILE_NAME record. --echo # valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2 --remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption5.zip -d $bugdir > $SEARCH_FILE +--move_file $bugdir/ib_logfile $bugdir/ib_logfile0 +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +die unless seek(OUT, 0x800, 0); +print OUT pack("N", 0x80000944); +die unless seek(OUT, 0x9fc, 0); +print OUT pack("N", 0xc86474db); +close OUT or die; +EOF --error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Log scan progressed past the checkpoint lsn 1213964; @@ -128,20 +256,50 @@ let SEARCH_PATTERN=InnoDB: Set innodb_force_recovery to ignore this error; --source include/search_pattern_in_file.inc --echo # Test a corrupted MLOG_FILE_NAME record. ---echo # valid header, invalid checkpoint 1, valid checkpoint 2 ---remove_file $bugdir/ib_logfile0 ---exec unzip $MTR_SUITE_DIR/std_data/log_corruption6.zip -d $bugdir > $SEARCH_FILE +--echo # valid header, invalid checkpoint 1, valid checkpoint 2, invalid block +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +# header block +print OUT pack("Nx[5]nx[5]", 1, 0x1286); +print OUT "ibbackup was here!!!1!"; +print OUT pack("x[470]N", 0x52b54540); +# invalid (all-zero) checkpoint page 1 and an empty log page +print OUT chr(0) x 1024; +# valid checkpoint block 2 +print OUT pack("x[13]nCNNx[264]", 0x1286, 12, 0, 0x80c); +print OUT pack("H*x[212]N", "590DBAACFE922582", 0xc72d49c4); +# log page +print OUT pack("H*", "800009440022000c00000001"); +# MLOG_CHECKPOINT record +print OUT pack("H*", "38000000000012860c"); +# MLOG_FILE_NAME record +print OUT pack("H*", "b7809781e80006"), "bigot"; +# padding and wrong log block checksum +print OUT pack("x[475]N", 150151); +close OUT or die; +EOF --error 1 --exec $MYSQLD $args -let SEARCH_PATTERN=InnoDB: ############### CORRUPT LOG RECORD FOUND ##################; +let SEARCH_PATTERN=InnoDB: Invalid log block checksum. block: 2372 checkpoint no: 1 expected: 2454333373 found: 150151; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=InnoDB: Log record type 55, page 151:488\. Log parsing proceeded successfully up to 1213973\. Previous log record type 56, is multi 0 Recv offset 9, prev 0; +--echo # valid header, invalid checkpoint 1, valid checkpoint 2, invalid log record +perl; +die unless open OUT, "+<", "$ENV{bugdir}/ib_logfile0"; +binmode OUT; +die unless seek(OUT, 0x9fc, 0); +print OUT pack("N", 2454333373); +close OUT or die; +EOF + +--error 1 +--exec $MYSQLD $args +--let SEARCH_PATTERN= len 22; hex 38000000000012860cb7809781e800066269676f7400; asc 8 bigot ; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=InnoDB: Hex dump starting 0 bytes before and ending 13 bytes after the corrupted record; ---source include/search_pattern_in_file.inc -let SEARCH_PATTERN= len 22. hex 38000000000012860cb7809781e80006626f67757300. asc 8 bogus ; ---source include/search_pattern_in_file.inc -let SEARCH_PATTERN=InnoDB: Set innodb_force_recovery to ignore this error; + +# Catch errors when built with one of the sanitizers +--let SEARCH_ABORT=FOUND +--let SEARCH_PATTERN=Sanitizer --source include/search_pattern_in_file.inc --list_files $bugdir diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index 9321faed9c6..51c721bfc93 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -1679,6 +1679,11 @@ dict_create_or_check_foreign_constraint_tables(void) return(DB_SUCCESS); } + if (srv_read_only_mode + || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO) { + return(DB_READ_ONLY); + } + trx = trx_allocate_for_mysql(); trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); @@ -1808,11 +1813,9 @@ dict_create_or_check_sys_virtual() return(DB_SUCCESS); } - if (srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO - || srv_read_only_mode) { - ib::error() << "Cannot create sys_virtual system tables;" - " running in read-only mode."; - return(DB_ERROR); + if (srv_read_only_mode + || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO) { + return(DB_READ_ONLY); } trx = trx_allocate_for_mysql(); @@ -2465,9 +2468,15 @@ dict_create_or_check_sys_tablespace(void) if (sys_tablespaces_err == DB_SUCCESS && sys_datafiles_err == DB_SUCCESS) { + srv_sys_tablespaces_open = true; return(DB_SUCCESS); } + if (srv_read_only_mode + || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO) { + return(DB_READ_ONLY); + } + trx = trx_allocate_for_mysql(); trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); @@ -2540,6 +2549,7 @@ dict_create_or_check_sys_tablespace(void) if (err == DB_SUCCESS) { ib::info() << "Tablespace and datafile system tables created."; + srv_sys_tablespaces_open = true; } /* Note: The master thread has not been started at this point. */ diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 78566d060cb..bc8b8ffd1dd 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -1023,25 +1023,24 @@ recv_find_max_checkpoint( /** Check the 4-byte checksum to the trailer checksum field of a log block. -@param[in] log block +@param[in] block log block +@param[in] print_err whether to report checksum mismatch @return whether the checksum matches */ bool -log_block_checksum_is_ok( - const byte* block, /*!< in: pointer to a log block */ - bool print_err) /*!< in print error ? */ +log_block_checksum_is_ok(const byte* block, bool print_err) { - if (log_block_get_checksum(block) != log_block_calc_checksum(block) && - print_err) { - ib::error() << " Log block checkpoint not correct." + bool valid + = log_block_get_checksum(block) == log_block_calc_checksum(block); + + if (!valid && print_err) { + ib::error() << "Invalid log block checksum." << " block: " << log_block_get_hdr_no(block) << " checkpoint no: " << log_block_get_checkpoint_no(block) - << " calc checkpoint: " << log_block_calc_checksum(block) - << " stored checkpoint: " << log_block_get_checksum(block); + << " expected: " << log_block_calc_checksum(block) + << " found: " << log_block_get_checksum(block); } - return(!innodb_log_checksums - || log_block_get_checksum(block) - == log_block_calc_checksum(block)); + return(valid || !innodb_log_checksums); } /** Try to parse a single log record body and also applies it if @@ -2778,12 +2777,6 @@ recv_scan_log_recs( return (TRUE); } - ib::error() << "Log block " << no << - " at lsn " << scanned_lsn << " has valid" - " header, but checksum field contains " - << log_block_get_checksum(log_block) - << ", should be " - << log_block_calc_checksum(log_block); /* Garbage or an incompletely written log block. This could be the result of killing the server diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 1d17bff4782..00acaed1555 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -2306,7 +2306,6 @@ files_checked: /* Open or Create SYS_TABLESPACES and SYS_DATAFILES so that tablespace names and other metadata can be found. */ - srv_sys_tablespaces_open = true; err = dict_create_or_check_sys_tablespace(); if (err != DB_SUCCESS) { return(srv_init_abort(err)); @@ -2435,7 +2434,8 @@ files_checked: } /* Create the doublewrite buffer to a new tablespace */ - if (buf_dblwr == NULL && !buf_dblwr_create()) { + if (!srv_read_only_mode && srv_force_recovery < SRV_FORCE_NO_TRX_UNDO + && !buf_dblwr_create()) { return(srv_init_abort(DB_ERROR)); } @@ -2503,20 +2503,22 @@ files_checked: /* Create the SYS_FOREIGN and SYS_FOREIGN_COLS system tables */ err = dict_create_or_check_foreign_constraint_tables(); - if (err != DB_SUCCESS) { - return(srv_init_abort(err)); + if (err == DB_SUCCESS) { + err = dict_create_or_check_sys_tablespace(); + if (err == DB_SUCCESS) { + err = dict_create_or_check_sys_virtual(); + } } - - /* Create the SYS_TABLESPACES system table */ - err = dict_create_or_check_sys_tablespace(); - if (err != DB_SUCCESS) { - return(srv_init_abort(err)); - } - srv_sys_tablespaces_open = true; - - /* Create the SYS_VIRTUAL system table */ - err = dict_create_or_check_sys_virtual(); - if (err != DB_SUCCESS) { + switch (err) { + case DB_SUCCESS: + break; + case DB_READ_ONLY: + if (srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO) { + break; + } + ib::error() << "Cannot create system tables in read-only mode"; + /* fall through */ + default: return(srv_init_abort(err)); } @@ -2757,7 +2759,8 @@ innodb_shutdown() ut_ad(dict_stats_event || !srv_was_started || srv_read_only_mode); ut_ad(dict_sys || !srv_was_started); ut_ad(trx_sys || !srv_was_started); - ut_ad(buf_dblwr || !srv_was_started); + ut_ad(buf_dblwr || !srv_was_started || srv_read_only_mode + || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO); ut_ad(lock_sys || !srv_was_started); ut_ad(btr_search_sys || !srv_was_started); ut_ad(ibuf || !srv_was_started);