cutting test in two because it takes many things
mysql-test/r/maria-recovery.result: cutting test in two mysql-test/r/maria-recovery2.result: cutting test in two mysql-test/t/maria-recovery.test: cutting test in two mysql-test/t/maria-recovery2-master.opt: cutting test in two mysql-test/t/maria-recovery2.test: cutting test in two
This commit is contained in:
parent
2425763869
commit
6559f5c229
@ -237,145 +237,6 @@ t1 CREATE TABLE `t1` (
|
|||||||
) ENGINE=MARIA AUTO_INCREMENT=17 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
|
) ENGINE=MARIA AUTO_INCREMENT=17 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
|
||||||
insert into t1 values(null, "f");
|
insert into t1 values(null, "f");
|
||||||
drop table t1;
|
drop table t1;
|
||||||
* TEST of removing logs manually
|
|
||||||
* shut down mysqld, removed logs, restarted it
|
|
||||||
* TEST of UNDO_ROW_DELETE preserving rowid
|
|
||||||
create table t1(a int) engine=maria;
|
|
||||||
insert into t1 values(1),(2);
|
|
||||||
flush table t1;
|
|
||||||
* copied t1 for comparison
|
|
||||||
lock tables t1 write;
|
|
||||||
insert into t1 values(3);
|
|
||||||
delete from t1 where a in (1,2,3);
|
|
||||||
SET SESSION debug="+d,maria_flush_whole_log,maria_crash";
|
|
||||||
* crashing mysqld intentionally
|
|
||||||
set global maria_checkpoint_interval=1;
|
|
||||||
ERROR HY000: Lost connection to MySQL server during query
|
|
||||||
* recovery happens
|
|
||||||
check table t1 extended;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
mysqltest.t1 check status OK
|
|
||||||
* testing that checksum after recovery is as expected
|
|
||||||
Checksum-check
|
|
||||||
ok
|
|
||||||
use mysqltest;
|
|
||||||
drop table t1;
|
|
||||||
* TEST of checkpoint
|
|
||||||
set global debug="+d,info,query,enter,exit,loop,maria_checkpoint_indirect";
|
|
||||||
set global maria_checkpoint_interval=10000;
|
|
||||||
create table t1(a int, b varchar(10), index(a,b)) engine=maria;
|
|
||||||
insert into t1 values(1,"a"),(2,"b"),(3,"c");
|
|
||||||
delete from t1 where b="b";
|
|
||||||
update t1 set b="d" where a=1;
|
|
||||||
flush table t1;
|
|
||||||
* copied t1 for comparison
|
|
||||||
lock tables t1 write;
|
|
||||||
insert into t1 values(4,"e"),(5,"f"),(6,"g");
|
|
||||||
update t1 set b="h" where a=5;
|
|
||||||
delete from t1 where b="g";
|
|
||||||
show status like "Maria_pagecache_blocks_not_flushed";
|
|
||||||
Variable_name Value
|
|
||||||
Maria_pagecache_blocks_not_flushed 3
|
|
||||||
set global maria_checkpoint_interval=10000;
|
|
||||||
update t1 set b="i" where a=5;
|
|
||||||
SET SESSION debug="+d,maria_crash";
|
|
||||||
* crashing mysqld intentionally
|
|
||||||
set global maria_checkpoint_interval=1;
|
|
||||||
ERROR HY000: Lost connection to MySQL server during query
|
|
||||||
* recovery happens
|
|
||||||
check table t1 extended;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
mysqltest.t1 check status OK
|
|
||||||
* testing that checksum after recovery is as expected
|
|
||||||
Checksum-check
|
|
||||||
ok
|
|
||||||
use mysqltest;
|
|
||||||
drop table t1;
|
|
||||||
Test of REPAIR's implicit commit
|
|
||||||
create table t1 (a varchar(100), key(a)) engine=maria;
|
|
||||||
insert into t1 values(3);
|
|
||||||
flush table t1;
|
|
||||||
* copied t1 for comparison
|
|
||||||
lock tables t1 write;
|
|
||||||
insert into t1 values (1);
|
|
||||||
repair table t1;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
mysqltest.t1 repair status OK
|
|
||||||
insert into t1 values(2);
|
|
||||||
select * from t1;
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
SET SESSION debug="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
|
||||||
* crashing mysqld intentionally
|
|
||||||
set global maria_checkpoint_interval=1;
|
|
||||||
ERROR HY000: Lost connection to MySQL server during query
|
|
||||||
* recovery happens
|
|
||||||
check table t1 extended;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
mysqltest.t1 check status OK
|
|
||||||
* testing that checksum after recovery is as expected
|
|
||||||
Checksum-check
|
|
||||||
failure
|
|
||||||
use mysqltest;
|
|
||||||
select * from t1;
|
|
||||||
a
|
|
||||||
1
|
|
||||||
3
|
|
||||||
drop table t1;
|
|
||||||
* TEST of recovery when crash before bulk-insert-with-repair is committed
|
|
||||||
create table t1 (a varchar(100), key(a)) engine=maria;
|
|
||||||
create table t2 (a varchar(100)) engine=myisam;
|
|
||||||
set rand_seed1=12, rand_seed2=254;
|
|
||||||
insert into t2 values (rand());
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t1 values(30);
|
|
||||||
flush table t1;
|
|
||||||
* copied t1 for comparison
|
|
||||||
lock tables t1 write, t2 read;
|
|
||||||
delete from t1 limit 1;
|
|
||||||
insert into t1 select * from t2;
|
|
||||||
SET SESSION debug="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
|
||||||
* crashing mysqld intentionally
|
|
||||||
set global maria_checkpoint_interval=1;
|
|
||||||
ERROR HY000: Lost connection to MySQL server during query
|
|
||||||
* recovery happens
|
|
||||||
check table t1 extended;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
mysqltest.t1 check status OK
|
|
||||||
* testing that checksum after recovery is as expected
|
|
||||||
Checksum-check
|
|
||||||
ok
|
|
||||||
use mysqltest;
|
|
||||||
show keys from t1;
|
|
||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
|
||||||
t1 1 a 1 a A 1 NULL NULL YES BTREE
|
|
||||||
drop table t1;
|
|
||||||
* TEST of recovery when OPTIMIZE has replaced the index file and crash
|
|
||||||
create table t_corrupted1 (a varchar(100), key(a)) engine=maria;
|
|
||||||
insert into t_corrupted1 select (rand()) from t2;
|
|
||||||
flush table t_corrupted1;
|
|
||||||
* copied t_corrupted1 for comparison
|
|
||||||
SET SESSION debug="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash_sort_index";
|
|
||||||
* crashing mysqld intentionally
|
|
||||||
optimize table t_corrupted1;
|
|
||||||
ERROR HY000: Lost connection to MySQL server during query
|
|
||||||
* recovery happens
|
|
||||||
check table t_corrupted1 extended;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
mysqltest.t_corrupted1 check warning Table is marked as crashed and last repair failed
|
|
||||||
mysqltest.t_corrupted1 check status OK
|
|
||||||
* testing that checksum after recovery is as expected
|
|
||||||
Checksum-check
|
|
||||||
ok
|
|
||||||
use mysqltest;
|
|
||||||
drop table t_corrupted1, t2;
|
|
||||||
drop database mysqltest_for_feeding_recovery;
|
drop database mysqltest_for_feeding_recovery;
|
||||||
drop database mysqltest_for_comparison;
|
drop database mysqltest_for_comparison;
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
|
145
mysql-test/r/maria-recovery2.result
Normal file
145
mysql-test/r/maria-recovery2.result
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
set global maria_log_file_size=4294967295;
|
||||||
|
drop database if exists mysqltest;
|
||||||
|
create database mysqltest;
|
||||||
|
use mysqltest;
|
||||||
|
* TEST of removing logs manually
|
||||||
|
* shut down mysqld, removed logs, restarted it
|
||||||
|
* TEST of UNDO_ROW_DELETE preserving rowid
|
||||||
|
create table t1(a int) engine=maria;
|
||||||
|
insert into t1 values(1),(2);
|
||||||
|
flush table t1;
|
||||||
|
* copied t1 for comparison
|
||||||
|
lock tables t1 write;
|
||||||
|
insert into t1 values(3);
|
||||||
|
delete from t1 where a in (1,2,3);
|
||||||
|
SET SESSION debug="+d,maria_flush_whole_log,maria_crash";
|
||||||
|
* crashing mysqld intentionally
|
||||||
|
set global maria_checkpoint_interval=1;
|
||||||
|
ERROR HY000: Lost connection to MySQL server during query
|
||||||
|
* recovery happens
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
mysqltest.t1 check status OK
|
||||||
|
* testing that checksum after recovery is as expected
|
||||||
|
Checksum-check
|
||||||
|
ok
|
||||||
|
use mysqltest;
|
||||||
|
drop table t1;
|
||||||
|
* TEST of checkpoint
|
||||||
|
set global debug="+d,info,query,enter,exit,loop,maria_checkpoint_indirect";
|
||||||
|
set global maria_checkpoint_interval=10000;
|
||||||
|
create table t1(a int, b varchar(10), index(a,b)) engine=maria;
|
||||||
|
insert into t1 values(1,"a"),(2,"b"),(3,"c");
|
||||||
|
delete from t1 where b="b";
|
||||||
|
update t1 set b="d" where a=1;
|
||||||
|
flush table t1;
|
||||||
|
* copied t1 for comparison
|
||||||
|
lock tables t1 write;
|
||||||
|
insert into t1 values(4,"e"),(5,"f"),(6,"g");
|
||||||
|
update t1 set b="h" where a=5;
|
||||||
|
delete from t1 where b="g";
|
||||||
|
show status like "Maria_pagecache_blocks_not_flushed";
|
||||||
|
Variable_name Value
|
||||||
|
Maria_pagecache_blocks_not_flushed 3
|
||||||
|
set global maria_checkpoint_interval=10000;
|
||||||
|
update t1 set b="i" where a=5;
|
||||||
|
SET SESSION debug="+d,maria_crash";
|
||||||
|
* crashing mysqld intentionally
|
||||||
|
set global maria_checkpoint_interval=1;
|
||||||
|
ERROR HY000: Lost connection to MySQL server during query
|
||||||
|
* recovery happens
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
mysqltest.t1 check status OK
|
||||||
|
* testing that checksum after recovery is as expected
|
||||||
|
Checksum-check
|
||||||
|
ok
|
||||||
|
use mysqltest;
|
||||||
|
drop table t1;
|
||||||
|
Test of REPAIR's implicit commit
|
||||||
|
create table t1 (a varchar(100), key(a)) engine=maria;
|
||||||
|
insert into t1 values(3);
|
||||||
|
flush table t1;
|
||||||
|
* copied t1 for comparison
|
||||||
|
lock tables t1 write;
|
||||||
|
insert into t1 values (1);
|
||||||
|
repair table t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
mysqltest.t1 repair status OK
|
||||||
|
insert into t1 values(2);
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SET SESSION debug="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
||||||
|
* crashing mysqld intentionally
|
||||||
|
set global maria_checkpoint_interval=1;
|
||||||
|
ERROR HY000: Lost connection to MySQL server during query
|
||||||
|
* recovery happens
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
mysqltest.t1 check status OK
|
||||||
|
* testing that checksum after recovery is as expected
|
||||||
|
Checksum-check
|
||||||
|
failure
|
||||||
|
use mysqltest;
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
drop table t1;
|
||||||
|
* TEST of recovery when crash before bulk-insert-with-repair is committed
|
||||||
|
create table t1 (a varchar(100), key(a)) engine=maria;
|
||||||
|
create table t2 (a varchar(100)) engine=myisam;
|
||||||
|
set rand_seed1=12, rand_seed2=254;
|
||||||
|
insert into t2 values (rand());
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t1 values(30);
|
||||||
|
flush table t1;
|
||||||
|
* copied t1 for comparison
|
||||||
|
lock tables t1 write, t2 read;
|
||||||
|
delete from t1 limit 1;
|
||||||
|
insert into t1 select * from t2;
|
||||||
|
SET SESSION debug="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
||||||
|
* crashing mysqld intentionally
|
||||||
|
set global maria_checkpoint_interval=1;
|
||||||
|
ERROR HY000: Lost connection to MySQL server during query
|
||||||
|
* recovery happens
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
mysqltest.t1 check status OK
|
||||||
|
* testing that checksum after recovery is as expected
|
||||||
|
Checksum-check
|
||||||
|
ok
|
||||||
|
use mysqltest;
|
||||||
|
show keys from t1;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
t1 1 a 1 a A 1 NULL NULL YES BTREE
|
||||||
|
drop table t1;
|
||||||
|
* TEST of recovery when OPTIMIZE has replaced the index file and crash
|
||||||
|
create table t_corrupted1 (a varchar(100), key(a)) engine=maria;
|
||||||
|
insert into t_corrupted1 select (rand()) from t2;
|
||||||
|
flush table t_corrupted1;
|
||||||
|
* copied t_corrupted1 for comparison
|
||||||
|
SET SESSION debug="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash_sort_index";
|
||||||
|
* crashing mysqld intentionally
|
||||||
|
optimize table t_corrupted1;
|
||||||
|
ERROR HY000: Lost connection to MySQL server during query
|
||||||
|
* recovery happens
|
||||||
|
check table t_corrupted1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
mysqltest.t_corrupted1 check warning Table is marked as crashed and last repair failed
|
||||||
|
mysqltest.t_corrupted1 check status OK
|
||||||
|
* testing that checksum after recovery is as expected
|
||||||
|
Checksum-check
|
||||||
|
ok
|
||||||
|
use mysqltest;
|
||||||
|
drop table t_corrupted1, t2;
|
||||||
|
drop database mysqltest_for_comparison;
|
||||||
|
drop database mysqltest;
|
@ -195,129 +195,6 @@ show create table t1;
|
|||||||
insert into t1 values(null, "f");
|
insert into t1 values(null, "f");
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# Test of removing logs manually
|
|
||||||
--echo * TEST of removing logs manually
|
|
||||||
let $mel_keep_control_file=1;
|
|
||||||
# this will shut mysqld down cleanly (so, take a checkpoint) and
|
|
||||||
# remove only logs; at restart Maria will create a new log with a high
|
|
||||||
# number
|
|
||||||
-- source include/maria_empty_logs.inc
|
|
||||||
let $mel_keep_control_file=0;
|
|
||||||
# next test will help us verify that a next recovery is ok
|
|
||||||
|
|
||||||
--echo * TEST of UNDO_ROW_DELETE preserving rowid
|
|
||||||
# we want recovery to use the tables as they were at time of crash
|
|
||||||
let $mvr_restore_old_snapshot=0;
|
|
||||||
# UNDO phase prevents physical comparison, normally,
|
|
||||||
# so we'll only use checksums to compare.
|
|
||||||
let $mms_compare_physically=0;
|
|
||||||
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
|
||||||
create table t1(a int) engine=maria;
|
|
||||||
insert into t1 values(1),(2);
|
|
||||||
-- source include/maria_make_snapshot_for_comparison.inc
|
|
||||||
lock tables t1 write;
|
|
||||||
insert into t1 values(3);
|
|
||||||
delete from t1 where a in (1,2,3);
|
|
||||||
-- source include/maria_verify_recovery.inc
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
# A basic checkpoint test
|
|
||||||
--echo * TEST of checkpoint
|
|
||||||
# Don't take a full checkpoints, we want to test checkpoint vs dirty pages
|
|
||||||
set global debug="+d,info,query,enter,exit,loop,maria_checkpoint_indirect";
|
|
||||||
# restart checkpoint thread for it to notice the above
|
|
||||||
set global maria_checkpoint_interval=10000;
|
|
||||||
create table t1(a int, b varchar(10), index(a,b)) engine=maria;
|
|
||||||
insert into t1 values(1,"a"),(2,"b"),(3,"c");
|
|
||||||
delete from t1 where b="b";
|
|
||||||
update t1 set b="d" where a=1;
|
|
||||||
-- source include/maria_make_snapshot_for_comparison.inc
|
|
||||||
lock tables t1 write;
|
|
||||||
insert into t1 values(4,"e"),(5,"f"),(6,"g");
|
|
||||||
update t1 set b="h" where a=5;
|
|
||||||
delete from t1 where b="g";
|
|
||||||
show status like "Maria_pagecache_blocks_not_flushed";
|
|
||||||
# force a checkpoint; there should be dirty pages and an open transaction
|
|
||||||
set global maria_checkpoint_interval=10000;
|
|
||||||
# do some more work
|
|
||||||
update t1 set b="i" where a=5;
|
|
||||||
let $mvr_restore_old_snapshot=0;
|
|
||||||
let $mms_compare_physically=0;
|
|
||||||
let $mvr_debug_option="+d,maria_crash";
|
|
||||||
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
|
||||||
# Now we have a recovery, which should use the checkpoint record
|
|
||||||
# and its dirty pages list.
|
|
||||||
-- source include/maria_verify_recovery.inc
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
--echo Test of REPAIR's implicit commit
|
|
||||||
let $mms_tables=1;
|
|
||||||
create table t1 (a varchar(100), key(a)) engine=maria;
|
|
||||||
let $mvr_restore_old_snapshot=0;
|
|
||||||
let $mms_compare_physically=0;
|
|
||||||
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
|
||||||
|
|
||||||
let $mvr_debug_option="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
|
||||||
insert into t1 values(3);
|
|
||||||
-- source include/maria_make_snapshot_for_comparison.inc
|
|
||||||
lock tables t1 write;
|
|
||||||
insert into t1 values (1);
|
|
||||||
repair table t1;
|
|
||||||
insert into t1 values(2);
|
|
||||||
select * from t1;
|
|
||||||
|
|
||||||
# checksum comparison failure is expected, SELECT output matters
|
|
||||||
-- source include/maria_verify_recovery.inc
|
|
||||||
# 2 should be missing (rolled back) but 1 should be committed
|
|
||||||
select * from t1;
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
--echo * TEST of recovery when crash before bulk-insert-with-repair is committed
|
|
||||||
create table t1 (a varchar(100), key(a)) engine=maria;
|
|
||||||
create table t2 (a varchar(100)) engine=myisam;
|
|
||||||
let $mvr_restore_old_snapshot=0;
|
|
||||||
let $mms_compare_physically=0;
|
|
||||||
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
|
||||||
let $mvr_debug_option="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
|
||||||
set rand_seed1=12, rand_seed2=254; # repeatable
|
|
||||||
insert into t2 values (rand());
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t2 select (rand()) from t2;
|
|
||||||
insert into t1 values(30);
|
|
||||||
-- source include/maria_make_snapshot_for_comparison.inc
|
|
||||||
lock tables t1 write, t2 read;
|
|
||||||
delete from t1 limit 1;
|
|
||||||
# 127 rows in t2, >100, so this will use repair-at-end
|
|
||||||
insert into t1 select * from t2;
|
|
||||||
-- source include/maria_verify_recovery.inc
|
|
||||||
show keys from t1; # should be enabled
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
--echo * TEST of recovery when OPTIMIZE has replaced the index file and crash
|
|
||||||
create table t_corrupted1 (a varchar(100), key(a)) engine=maria;
|
|
||||||
# we use a special name because this test portion will generate
|
|
||||||
# corruption warnings, which we tell mtr_report.pl to ignore by
|
|
||||||
# putting the message in mtr_report.pl, but we don't want to it ignore
|
|
||||||
# corruption messages of other tests, hence the special name
|
|
||||||
# 't_corrupted' and not just 't'.
|
|
||||||
let $mms_tname=t_corrupted;
|
|
||||||
let $mvr_restore_old_snapshot=0;
|
|
||||||
let $mms_compare_physically=0;
|
|
||||||
let $mvr_crash_statement= optimize table t_corrupted1;
|
|
||||||
let $mvr_debug_option="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash_sort_index";
|
|
||||||
insert into t_corrupted1 select (rand()) from t2;
|
|
||||||
-- source include/maria_make_snapshot_for_comparison.inc
|
|
||||||
# Recovery will not fix the table, but we expect to see it marked
|
|
||||||
# "crashed on repair".
|
|
||||||
# Because crash is mild, the table is actually not corrupted, so the
|
|
||||||
# "check table extended" done below fixes the table.
|
|
||||||
-- source include/maria_verify_recovery.inc
|
|
||||||
drop table t_corrupted1, t2;
|
|
||||||
|
|
||||||
# clean up everything
|
# clean up everything
|
||||||
let $mms_purpose=feeding_recovery;
|
let $mms_purpose=feeding_recovery;
|
||||||
eval drop database mysqltest_for_$mms_purpose;
|
eval drop database mysqltest_for_$mms_purpose;
|
||||||
|
1
mysql-test/t/maria-recovery2-master.opt
Normal file
1
mysql-test/t/maria-recovery2-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--skip-stack-trace --skip-core-file --maria-log-dir-path=../tmp
|
159
mysql-test/t/maria-recovery2.test
Normal file
159
mysql-test/t/maria-recovery2.test
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
--source include/not_embedded.inc
|
||||||
|
# Don't test this under valgrind, memory leaks will occur as we crash
|
||||||
|
--source include/not_valgrind.inc
|
||||||
|
# Binary must be compiled with debug for crash to occur
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_maria.inc
|
||||||
|
|
||||||
|
set global maria_log_file_size=4294967295;
|
||||||
|
let $MARIA_LOG=../tmp;
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop database if exists mysqltest;
|
||||||
|
--enable_warnings
|
||||||
|
create database mysqltest;
|
||||||
|
let $mms_tname=t;
|
||||||
|
|
||||||
|
# Include scripts can perform SQL. For it to not influence the main test
|
||||||
|
# they use a separate connection. This way if they use a DDL it would
|
||||||
|
# not autocommit in the main test.
|
||||||
|
connect (admin, 127.0.0.1, root,,mysqltest,,);
|
||||||
|
--enable_reconnect
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
use mysqltest;
|
||||||
|
--enable_reconnect
|
||||||
|
|
||||||
|
let $mms_tables=1;
|
||||||
|
let $mvr_restore_old_snapshot=0;
|
||||||
|
let $mms_compare_physically=0;
|
||||||
|
let $mvr_debug_option="+d,maria_flush_whole_log,maria_crash";
|
||||||
|
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
||||||
|
|
||||||
|
# Test of removing logs manually
|
||||||
|
--echo * TEST of removing logs manually
|
||||||
|
let $mel_keep_control_file=1;
|
||||||
|
# this will shut mysqld down cleanly (so, take a checkpoint) and
|
||||||
|
# remove only logs; at restart Maria will create a new log with a high
|
||||||
|
# number
|
||||||
|
-- source include/maria_empty_logs.inc
|
||||||
|
let $mel_keep_control_file=0;
|
||||||
|
# next test will help us verify that a next recovery is ok
|
||||||
|
|
||||||
|
--echo * TEST of UNDO_ROW_DELETE preserving rowid
|
||||||
|
# we want recovery to use the tables as they were at time of crash
|
||||||
|
let $mvr_restore_old_snapshot=0;
|
||||||
|
# UNDO phase prevents physical comparison, normally,
|
||||||
|
# so we'll only use checksums to compare.
|
||||||
|
let $mms_compare_physically=0;
|
||||||
|
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
||||||
|
create table t1(a int) engine=maria;
|
||||||
|
insert into t1 values(1),(2);
|
||||||
|
-- source include/maria_make_snapshot_for_comparison.inc
|
||||||
|
lock tables t1 write;
|
||||||
|
insert into t1 values(3);
|
||||||
|
delete from t1 where a in (1,2,3);
|
||||||
|
-- source include/maria_verify_recovery.inc
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# A basic checkpoint test
|
||||||
|
--echo * TEST of checkpoint
|
||||||
|
# Don't take a full checkpoints, we want to test checkpoint vs dirty pages
|
||||||
|
set global debug="+d,info,query,enter,exit,loop,maria_checkpoint_indirect";
|
||||||
|
# restart checkpoint thread for it to notice the above
|
||||||
|
set global maria_checkpoint_interval=10000;
|
||||||
|
create table t1(a int, b varchar(10), index(a,b)) engine=maria;
|
||||||
|
insert into t1 values(1,"a"),(2,"b"),(3,"c");
|
||||||
|
delete from t1 where b="b";
|
||||||
|
update t1 set b="d" where a=1;
|
||||||
|
-- source include/maria_make_snapshot_for_comparison.inc
|
||||||
|
lock tables t1 write;
|
||||||
|
insert into t1 values(4,"e"),(5,"f"),(6,"g");
|
||||||
|
update t1 set b="h" where a=5;
|
||||||
|
delete from t1 where b="g";
|
||||||
|
show status like "Maria_pagecache_blocks_not_flushed";
|
||||||
|
# force a checkpoint; there should be dirty pages and an open transaction
|
||||||
|
set global maria_checkpoint_interval=10000;
|
||||||
|
# do some more work
|
||||||
|
update t1 set b="i" where a=5;
|
||||||
|
let $mvr_restore_old_snapshot=0;
|
||||||
|
let $mms_compare_physically=0;
|
||||||
|
let $mvr_debug_option="+d,maria_crash";
|
||||||
|
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
||||||
|
# Now we have a recovery, which should use the checkpoint record
|
||||||
|
# and its dirty pages list.
|
||||||
|
-- source include/maria_verify_recovery.inc
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo Test of REPAIR's implicit commit
|
||||||
|
let $mms_tables=1;
|
||||||
|
create table t1 (a varchar(100), key(a)) engine=maria;
|
||||||
|
let $mvr_restore_old_snapshot=0;
|
||||||
|
let $mms_compare_physically=0;
|
||||||
|
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
||||||
|
|
||||||
|
let $mvr_debug_option="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
||||||
|
insert into t1 values(3);
|
||||||
|
-- source include/maria_make_snapshot_for_comparison.inc
|
||||||
|
lock tables t1 write;
|
||||||
|
insert into t1 values (1);
|
||||||
|
repair table t1;
|
||||||
|
insert into t1 values(2);
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
# checksum comparison failure is expected, SELECT output matters
|
||||||
|
-- source include/maria_verify_recovery.inc
|
||||||
|
# 2 should be missing (rolled back) but 1 should be committed
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo * TEST of recovery when crash before bulk-insert-with-repair is committed
|
||||||
|
create table t1 (a varchar(100), key(a)) engine=maria;
|
||||||
|
create table t2 (a varchar(100)) engine=myisam;
|
||||||
|
let $mvr_restore_old_snapshot=0;
|
||||||
|
let $mms_compare_physically=0;
|
||||||
|
let $mvr_crash_statement= set global maria_checkpoint_interval=1;
|
||||||
|
let $mvr_debug_option="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash";
|
||||||
|
set rand_seed1=12, rand_seed2=254; # repeatable
|
||||||
|
insert into t2 values (rand());
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t2 select (rand()) from t2;
|
||||||
|
insert into t1 values(30);
|
||||||
|
-- source include/maria_make_snapshot_for_comparison.inc
|
||||||
|
lock tables t1 write, t2 read;
|
||||||
|
delete from t1 limit 1;
|
||||||
|
# 127 rows in t2, >100, so this will use repair-at-end
|
||||||
|
insert into t1 select * from t2;
|
||||||
|
-- source include/maria_verify_recovery.inc
|
||||||
|
show keys from t1; # should be enabled
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo * TEST of recovery when OPTIMIZE has replaced the index file and crash
|
||||||
|
create table t_corrupted1 (a varchar(100), key(a)) engine=maria;
|
||||||
|
# we use a special name because this test portion will generate
|
||||||
|
# corruption warnings, which we tell mtr_report.pl to ignore by
|
||||||
|
# putting the message in mtr_report.pl, but we don't want to it ignore
|
||||||
|
# corruption messages of other tests, hence the special name
|
||||||
|
# 't_corrupted' and not just 't'.
|
||||||
|
let $mms_tname=t_corrupted;
|
||||||
|
let $mvr_restore_old_snapshot=0;
|
||||||
|
let $mms_compare_physically=0;
|
||||||
|
let $mvr_crash_statement= optimize table t_corrupted1;
|
||||||
|
let $mvr_debug_option="+d,maria_flush_whole_log,maria_flush_whole_page_cache,maria_crash_sort_index";
|
||||||
|
insert into t_corrupted1 select (rand()) from t2;
|
||||||
|
-- source include/maria_make_snapshot_for_comparison.inc
|
||||||
|
# Recovery will not fix the table, but we expect to see it marked
|
||||||
|
# "crashed on repair".
|
||||||
|
# Because crash is mild, the table is actually not corrupted, so the
|
||||||
|
# "check table extended" done below fixes the table.
|
||||||
|
-- source include/maria_verify_recovery.inc
|
||||||
|
drop table t_corrupted1, t2;
|
||||||
|
|
||||||
|
# clean up everything
|
||||||
|
let $mms_purpose=comparison;
|
||||||
|
eval drop database mysqltest_for_$mms_purpose;
|
||||||
|
drop database mysqltest;
|
Loading…
x
Reference in New Issue
Block a user