Server IP : 172.67.216.182 / Your IP : 162.158.170.172 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/mysql-test/suite/innodb/t/ |
Upload File : |
# # Test opening a corrupted table. # # Valgrind can hang or return spurious messages on DBUG_SUICIDE source include/not_valgrind.inc; # Avoid CrashReporter popup on Mac source include/not_crashrep.inc; # Restarting is not supported under embedded source include/not_embedded.inc; # Require InnoDB source include/have_innodb.inc; # Require Debug for SET DEBUG source include/have_debug.inc; --disable_query_log CALL mtr.add_suppression("\\[ERROR\\] \\[FATAL\\] InnoDB: Unable to read page \\[page id: space=.*, page number=.*\\] into the buffer pool after 100 attempts"); CALL mtr.add_suppression("\\[ERROR\\] InnoDB: Database page corruption on disk or a failed"); --enable_query_log # Disable compression for this table, otherwise our pattern matching below # will not work --echo # Create and populate the table to be corrupted CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) COMPRESSION="none", ROW_FORMAT=COMPACT ENGINE=InnoDB; INSERT INTO t1 (b) VALUES ('corrupt me'); --disable_query_log --let $i = 10 while ($i) { INSERT INTO t1 (b) VALUES (REPEAT('abcdefghijklmnopqrstuvwxyz', 100)); dec $i; } --enable_query_log INSERT INTO t1 (b) VALUES ('corrupt me'); let $MYSQLD_DATADIR=`select @@datadir`; let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd; --source include/shutdown_mysqld.inc --echo # Backup the t1.ibd before corrupting --copy_file $t1_IBD $MYSQLD_DATADIR/test/t1.ibd.backup --echo # Corrupt the table perl; use strict; use warnings; use Fcntl qw(:DEFAULT :seek); my $ibd_file = $ENV{'t1_IBD'}; my $chunk; my $len; sysopen IBD_FILE, $ibd_file, O_RDWR || die "Unable to open $ibd_file"; while ($len = sysread IBD_FILE, $chunk, 1024) { if ($chunk =~ s/corrupt me/korrupt me/) { print "Munged a string.\n"; sysseek IBD_FILE, -$len, SEEK_CUR; syswrite IBD_FILE, $chunk, $len; } } close IBD_FILE; EOF --source include/start_mysqld.inc SET DEBUG = '+d,innodb_page_corruption_retries'; --echo # Write file to make mysql-test-run.pl expect the "crash", but don't --echo # start it until it's told to --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --echo # The below SELECT query will crash the server because some pages --echo # on the disk are corrupted --error 2013 SELECT * FROM t1; # The below mtr command --remove_file fails randomly on windows with # error number 13 which is permission denied on nix systems. We sleep # 1 second hoping that any process holding lock on t1.ibd is released. SLEEP 1; --echo # Restore the original t1.ibd --remove_file $MYSQLD_DATADIR/test/t1.ibd --move_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd --source include/start_mysqld.inc # Note SET DEBUG = '-d,innodb_page_corruption_retries' is not required # because the session information is lost after server restart --echo # Cleanup DROP TABLE t1;