diff --git a/mysql-test/include/maria_empty_logs.inc b/mysql-test/include/maria_empty_logs.inc index 2a4defe7b82..c3501051fd5 100644 --- a/mysql-test/include/maria_empty_logs.inc +++ b/mysql-test/include/maria_empty_logs.inc @@ -4,6 +4,9 @@ # API: set mel_keep_control_file=1 if want to keep control file; # uses vardir, port and socket. +connection default; +let $default_db=`select database()`; + connection admin; -- echo * shut down mysqld, removed logs, restarted it @@ -71,4 +74,4 @@ EOF connection default; # the effect of "use" is lost after a restart so we are back into db "test", # because connection 'default' was created with db "test". -use mysqltest; +eval use $default_db; diff --git a/mysql-test/r/maria-no-logging.result b/mysql-test/r/maria-no-logging.result new file mode 100644 index 00000000000..5d33e61f198 --- /dev/null +++ b/mysql-test/r/maria-no-logging.result @@ -0,0 +1,55 @@ +set global maria_log_file_size=4294967295; +drop database if exists mysqltest; +create database mysqltest; +use mysqltest; +set global maria_checkpoint_interval=0; +create table t2 (a varchar(100)) engine=myisam; +insert into t2 select repeat('z',100); +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +* shut down mysqld, removed logs, restarted it +use mysqltest; +create table t1 (a varchar(100)) engine=maria transactional=1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(100) DEFAULT NULL +) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1 +show engine maria logs; +Type Name Status +MARIA Size 16384 maria_log.00000001 unknown +insert into t1 values('a'); +insert into t1 select * from t2; +show engine maria logs; +Type Name Status +MARIA Size 24576 maria_log.00000001 unknown +* shut down mysqld, removed logs, restarted it +use mysqltest; +truncate table t1; +insert into t1 select * from t2; +show engine maria logs; +Type Name Status +MARIA Size 16384 maria_log.00000001 unknown +drop table t1; +* shut down mysqld, removed logs, restarted it +use mysqltest; +create table t1 (a varchar(100)) engine=maria transactional=1; +insert into t1 values('a'); +create table if not exists t1 select * from t2; +Warnings: +Note 1050 Table 't1' already exists +show engine maria logs; +Type Name Status +MARIA Size 24576 maria_log.00000001 unknown +* shut down mysqld, removed logs, restarted it +use mysqltest; +drop table t1; +create table t1 engine=maria transactional=1 select * from t2; +show engine maria logs; +Type Name Status +MARIA Size 16384 maria_log.00000001 unknown +drop database mysqltest; diff --git a/mysql-test/r/maria-purge.result b/mysql-test/r/maria-purge.result index 8155bc6ef2a..2fd68e7b94b 100644 --- a/mysql-test/r/maria-purge.result +++ b/mysql-test/r/maria-purge.result @@ -1,3 +1,5 @@ +* shut down mysqld, removed logs, restarted it +use test; set global storage_engine=maria; set session storage_engine=maria; set global maria_log_file_size=4294967295; diff --git a/mysql-test/t/maria-no-logging.test b/mysql-test/t/maria-no-logging.test new file mode 100644 index 00000000000..8ed2dbad338 --- /dev/null +++ b/mysql-test/t/maria-no-logging.test @@ -0,0 +1,81 @@ +# test of cases where we can safely disable logging + +--source include/have_maria.inc + +set global maria_log_file_size=4294967295; + +--disable_warnings +drop database if exists mysqltest; +--enable_warnings +create database mysqltest; + +connect (admin, 127.0.0.1, root,,mysqltest,,); +--enable_reconnect + +connection default; +use mysqltest; +--enable_reconnect + +# checkpoints can make log unrepeatable +let $def_checkinterval=`select @@global.maria_checkpoint_interval`; +set global maria_checkpoint_interval=0; + +# Prepare table to help for big load +create table t2 (a varchar(100)) engine=myisam; +insert into t2 select repeat('z',100); +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; +insert into t2 select * from t2; + +# INSERT SELECT + +# no optimization because table not empty + +# SHOW ENGINE MARIA LOGS could be influenced by older logs +-- source include/maria_empty_logs.inc +create table t1 (a varchar(100)) engine=maria transactional=1; +show create table t1; +--replace_regex /; .+maria_log/maria_log/ +show engine maria logs; + +insert into t1 values('a'); +insert into t1 select * from t2; +--replace_regex /; .+maria_log/maria_log/ +show engine maria logs; + +# optimization because table is empty +-- source include/maria_empty_logs.inc +truncate table t1; +insert into t1 select * from t2; +--replace_regex /; .+maria_log/maria_log/ +show engine maria logs; + +drop table t1; + +# same for CREATE SELECT + +# no optimization because table not empty +-- source include/maria_empty_logs.inc +create table t1 (a varchar(100)) engine=maria transactional=1; +insert into t1 values('a'); +create table if not exists t1 select * from t2; +--replace_regex /; .+maria_log/maria_log/ +show engine maria logs; + +# optimization because table is empty +-- source include/maria_empty_logs.inc +drop table t1; +create table t1 engine=maria transactional=1 select * from t2; +--replace_regex /; .+maria_log/maria_log/ +show engine maria logs; + +drop database mysqltest; + +--disable_result_log +--disable_query_log +eval set global maria_checkpoint_interval=$def_checkinterval; +--enable_result_log +--enable_query_log diff --git a/mysql-test/t/maria-purge.test b/mysql-test/t/maria-purge.test index 025118d3296..bb1a04d639b 100644 --- a/mysql-test/t/maria-purge.test +++ b/mysql-test/t/maria-purge.test @@ -1,5 +1,18 @@ -- source include/have_maria.inc -- source include/big_test.inc + +# pre-requisites for maria_empty_logs +connect (admin, 127.0.0.1, root,,test,,); +--enable_reconnect +connection default; +--enable_reconnect +# end of pre-requisites + +# SHOW ENGINE MARIA LOGS could be influenced by older logs +# Also, possibly automatic checkpoints (see if that happens in +# practice) +-- source include/maria_empty_logs.inc + let $default=`select @@global.storage_engine`; set global storage_engine=maria; set session storage_engine=maria; @@ -47,6 +60,7 @@ insert into t2 select * from t1; insert into t1 select * from t2; set global maria_log_file_size=16777216; +# force a checkpoint to allow log purge eval set global maria_checkpoint_interval=$def_checkinterval; --replace_regex /Size +[0-9]+ ; .+master-data/master-data/ SHOW ENGINE maria logs;