set global aria_log_file_size=4294959104; drop database if exists mysqltest; create database mysqltest; connect admin, localhost, root,,mysqltest,,; connection default; use mysqltest; connection default; connection admin; * shut down mysqld, removed logs, restarted it connection default; create table t1 (a varchar(1000)) engine=aria; * TEST of REDO: see if recovery can reconstruct if we give it an old table connection admin; * copied t1 for feeding_recovery connection default; insert into t1 values ("00000000"); connection admin; flush table t1; * copied t1 for comparison connection default; connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to server during query * copied t1 back for feeding_recovery * 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 * compared t1 to old version connection default; use mysqltest; select * from t1; a 00000000 * TEST of REDO+UNDO: normal recovery test (no moving tables under its feet) insert into t1 values ("00000000"); connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write; insert into t1 values ("aaaaaaaaa"); connection admin; SET SESSION debug_dbug="+d,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to 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 connection default; use mysqltest; select * from t1; a 00000000 00000000 insert into t1 values ("00000000"); connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write; insert into t1 values ("aaaaaaaaa"); connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_page_cache,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to 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 connection default; use mysqltest; select * from t1; a 00000000 00000000 00000000 insert into t1 values ("00000000"); connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write; insert into t1 values ("aaaaaaaaa"); connection admin; SET SESSION debug_dbug="+d,maria_flush_states,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to 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 connection default; use mysqltest; select * from t1; a 00000000 00000000 00000000 00000000 insert into t1 values ("00000000"); connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write; insert into t1 values ("aaaaaaaaa"); connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to 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 connection default; use mysqltest; select * from t1; a 00000000 00000000 00000000 00000000 00000000 drop table t1; * TEST of two REDOs for same page in one REDO group connection default; connection admin; * shut down mysqld, removed logs, restarted it connection default; CREATE TABLE t1 ( i int, b blob default NULL, c varchar(6000) default NULL ) ENGINE=ARIA CHECKSUM=1; connection admin; * copied t1 for feeding_recovery connection default; INSERT INTO t1 VALUES (1, REPEAT('a', 5000), REPEAT('b', 5000)); UPDATE t1 SET i=3, b=CONCAT(b,'c') WHERE i=1; SELECT LENGTH(b) FROM t1 WHERE i=3; LENGTH(b) 5001 connection admin; flush table t1; * copied t1 for comparison connection default; connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to server during query * copied t1 back for feeding_recovery * 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 connection default; use mysqltest; SELECT LENGTH(b) FROM t1 WHERE i=3; LENGTH(b) 5001 drop table t1; * TEST of INSERT vs state.auto_increment connection default; connection admin; * shut down mysqld, removed logs, restarted it connection default; CREATE TABLE t1 ( i int auto_increment primary key, c varchar(6), key(c) ) ENGINE=ARIA; insert into t1 values(null,"b"); connection admin; * copied t1 for feeding_recovery connection default; insert into t1 values(null,"a"), (null,"c"), (null,"d"); delete from t1 where c="d"; connection admin; flush table t1; * copied t1 for comparison connection default; connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to server during query * copied t1 back for feeding_recovery * 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 connection default; use mysqltest; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `i` int(11) NOT NULL AUTO_INCREMENT, `c` varchar(6) DEFAULT NULL, PRIMARY KEY (`i`), KEY `c` (`c`) ) ENGINE=Aria AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci PAGE_CHECKSUM=1 * TEST of UPDATE vs state.auto_increment connection admin; * copied t1 for feeding_recovery connection default; update t1 set i=15 where c="a"; connection admin; flush table t1; * copied t1 for comparison connection default; connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to server during query * copied t1 back for feeding_recovery * 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 connection default; use mysqltest; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `i` int(11) NOT NULL AUTO_INCREMENT, `c` varchar(6) DEFAULT NULL, PRIMARY KEY (`i`), KEY `c` (`c`) ) ENGINE=Aria AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci PAGE_CHECKSUM=1 * TEST of INSERT's rollback vs state.auto_increment connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write; insert into t1 values(null, "e"); connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to 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 connection default; use mysqltest; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `i` int(11) NOT NULL AUTO_INCREMENT, `c` varchar(6) DEFAULT NULL, PRIMARY KEY (`i`), KEY `c` (`c`) ) ENGINE=Aria AUTO_INCREMENT=17 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci PAGE_CHECKSUM=1 insert into t1 values(null, "f"); drop table t1; Test that bulk insert works with recovery CREATE TABLE t1 (i int, key(i)) TRANSACTIONAL=1 ENGINE=ARIA; CREATE TABLE t2 (i int, key(i)) TRANSACTIONAL=1 ENGINE=ARIA; connection admin; * copied t2 for feeding_recovery * copied t1 for feeding_recovery connection default; insert into t2 values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (3), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); insert into t1 select * from t2; insert into t2 select * from t2; connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash"; * crashing mysqld intentionally set global aria_checkpoint_interval=1; ERROR HY000: Lost connection to server during query * recovery happens connection default; use mysqltest; select count(*) from t1; count(*) 100 select count(*) from t2; count(*) 200 check table t2; Table Op Msg_type Msg_text mysqltest.t2 check status OK drop table t1,t2; drop database mysqltest_for_feeding_recovery; drop database mysqltest_for_comparison; drop database mysqltest;