call mtr.add_suppression("File '.*aria_log.000.*' not found \\(Errcode: 2 .*\\)"); call mtr.add_suppression("Table '.\/mysqltest\/t_corrupted1' is crashed, skipping it. Please repair it with aria_chk -r"); set global aria_log_file_size=4294959104; drop database if exists mysqltest; create database mysqltest; connect admin, 127.0.0.1, root,,mysqltest,,; connection default; use mysqltest; * TEST of removing logs manually connection default; connection admin; * shut down mysqld, removed logs, restarted it connection default; * TEST of UNDO_ROW_DELETE preserving rowid create table t1(a int) engine=aria; insert into t1 values(1),(2); connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write; insert into t1 values(3); delete from t1 where a in (1,2,3); 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; drop table t1; * TEST of checkpoint set global debug_dbug="+d,info,query,enter,exit,loop,maria_checkpoint_indirect"; set global aria_checkpoint_interval=10000; create table t1(a int, b varchar(10), index(a,b)) engine=aria; insert into t1 values(1,"a"),(2,"b"),(3,"c"); delete from t1 where b="b"; update t1 set b="d" where a=1; connection admin; flush table t1; * copied t1 for comparison connection default; 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 "Aria_pagecache_blocks_not_flushed"; Variable_name Value Aria_pagecache_blocks_not_flushed 3 set global aria_checkpoint_interval=10000; update t1 set b="i" where a=5; 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; drop table t1; Test of REPAIR's implicit commit create table t1 (a varchar(100), key(a)) engine=aria; insert into t1 values(3); connection admin; flush table t1; * copied t1 for comparison connection default; 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 connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,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 failure connection default; 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=aria; 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); connection admin; flush table t1; * copied t1 for comparison connection default; lock tables t1 write, t2 read; delete from t1 limit 1; select count(*) from t1; count(*) 0 insert into t1 select * from t2; connection admin; SET SESSION debug_dbug="+d,maria_flush_whole_log,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; show keys from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Ignored t1 1 a 1 a A 1 NULL NULL YES BTREE NO select count(*) from t1; count(*) 1 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=aria; insert into t_corrupted1 select (rand()) from t2; connection admin; flush table t_corrupted1; * copied t_corrupted1 for comparison connection default; connection admin; SET SESSION debug_dbug="+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 server during query * recovery happens check table t_corrupted1 extended; Table Op Msg_type Msg_text mysqltest.t_corrupted1 check warning Last repair was aborted before finishing mysqltest.t_corrupted1 check status OK * testing that checksum after recovery is as expected Checksum-check ok connection default; use mysqltest; drop table t_corrupted1, t2; drop database mysqltest_for_comparison; drop database mysqltest;