summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/maria/maria-recover.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/maria/maria-recover.test')
-rw-r--r--mysql-test/suite/maria/maria-recover.test90
1 files changed, 90 insertions, 0 deletions
diff --git a/mysql-test/suite/maria/maria-recover.test b/mysql-test/suite/maria/maria-recover.test
new file mode 100644
index 00000000..5ddfd6d2
--- /dev/null
+++ b/mysql-test/suite/maria/maria-recover.test
@@ -0,0 +1,90 @@
+# Test of the --aria-recover-options option.
+
+--source include/have_maria.inc
+--source include/default_charset.inc
+
+#
+# Ensure that we don't get warnings from mysql.proc (used by check_mysqld)
+#
+
+--disable_query_log
+--disable_warnings
+--disable_result_log
+select count(*) from mysql.proc;
+--enable_result_log
+--enable_warnings
+--enable_query_log
+
+--disable_query_log
+# Note: \\. matches a single period. We use '.' as directory separator to
+# account for Unix and Windows variation.
+call mtr.add_suppression("Checking table: '\\..mysqltest.t_corrupted2'");
+call mtr.add_suppression("Recovering table: '\\..mysqltest.t_corrupted2'");
+call mtr.add_suppression("Table was marked as crashed and should be repaired");
+call mtr.add_suppression("Read page with wrong checksum");
+
+let $def_checkinterval=`select @@global.aria_checkpoint_interval`;
+
+--enable_query_log
+
+# Note: we're setting an environment variable (not prefixing it by $),
+# so that the perl code below can access it.
+let MYSQLD_DATADIR= `select @@datadir`;
+
+select @@global.aria_recover_options;
+set global aria_recover_options=off;
+select @@global.aria_recover_options;
+set global aria_recover_options=default;
+select @@global.aria_recover_options;
+set global aria_recover_options=normal;
+select @@global.aria_recover_options;
+
+--disable_warnings
+drop database if exists mysqltest;
+--enable_warnings
+create database mysqltest;
+
+use mysqltest;
+
+create table t1 (a varchar(1000), index(a)) engine=aria;
+insert into t1 values("ThursdayMorningsMarket");
+
+flush table t1; # put index page on disk
+insert into t1 select concat(a,'b') from t1 limit 1;
+# force a checkpoint to get the open count > 0
+set global aria_checkpoint_interval=1000;
+# Wait for checkpoint to happen
+--sleep 1
+# now t1 has its open_count>0 and so will t2_corrupted.
+# It is not named t2 because the corruption messages which will be put
+# in the error log need to be detected in mtr_process.pl, and we want
+# a specific name to do specific detection (don't want to ignore
+# any corruption messages of other tests using "t2" as table).
+
+copy_file $MYSQLD_DATADIR/mysqltest/t1.frm $MYSQLD_DATADIR/mysqltest/t_corrupted2.frm;
+copy_file $MYSQLD_DATADIR/mysqltest/t1.MAD $MYSQLD_DATADIR/mysqltest/t_corrupted2.MAD;
+copy_file $MYSQLD_DATADIR/mysqltest/t1.MAI $MYSQLD_DATADIR/mysqltest/t_corrupted2.MAI;
+
+# Ruin the index file.
+# If aria-block-size is smaller than the default, the corruption
+# messages will differ.
+perl;
+ use strict;
+ use warnings;
+ my $fname= "$ENV{'MYSQLD_DATADIR'}/mysqltest/t_corrupted2.MAI";
+ open(FILE, "+<", $fname) or die;
+ my $whatever= ("\xAB" x 100);
+ sysseek (FILE, 8192, 0) or die;
+ syswrite (FILE, $whatever) or die;
+ close FILE;
+EOF
+--replace_result \\ /
+--replace_regex /for '.*t_corrupted2/for 't_corrupted2/
+--enable_prepare_warnings
+select * from t_corrupted2; # should show corruption and repair messages
+--disable_prepare_warnings
+select * from t_corrupted2; # should show just rows
+
+drop database mysqltest;
+set global aria_recover_options=backup;
+eval set global aria_checkpoint_interval=$def_checkinterval;