config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/innodb/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/innodb/t/innodb-wl6445-1.test

######## suite/innodb/t/innodb-wl6445-1                     ##########
#                                                                    #
# Testcase for worklog WL#6445: InnoDB should be able to work with   #
# read-only tables
# All sub-test in this file focus on restarting server in read only  #
# and verify necessary operations blocked                            #
# operations                                                         #
#                                                                    #
#                                                                    #
# Creation:                                                          #
# 2011-09-06 Implemented this test as part of WL#6445                #
#                                                                    #
######################################################################

# Restarting is not supported in embedded
--source include/not_embedded.inc
--source include/have_innodb.inc

# This test takes long time, so only run it with the --big-test mtr-flag.
--source include/big_test.inc

let MYSQLD_DATADIR =`SELECT @@datadir`;
let $innodb_file_per_table = `SELECT @@innodb_file_per_table`;
let $innodb_flush_log_at_trx_commit_orig =`select @@innodb_flush_log_at_trx_commit`;

SET GLOBAL innodb_file_per_table = 1;
SELECT @@innodb_file_per_table;

let $MYSQLD_DATADIR = `SELECT @@datadir`;
let $data_index_directory = DATA DIRECTORY='$MYSQL_TMP_DIR/alt_dir';

CREATE DATABASE testdb_wl6445;


#------------------------------------------------------------------------------
# Testcase 1 covers
# a) Create table/data , restart server in readonly mode
# b) verify DDL/DML/DCL in read only mode
# c) statements blocked for non root and root user from differet sessions.
#------------------------------------------------------------------------------
--echo case # 1
USE testdb_wl6445;
CREATE TABLE t1 ( i int PRIMARY KEY , j blob) ENGINE = InnoDB;

INSERT INTO t1 VALUES (1,repeat('a',200)),(2,repeat('b',200)),(3,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;

# Create user with minimun access
CREATE USER 'test1'@'localhost' IDENTIFIED BY '123';
GRANT ALL ON testdb_wl6445.* TO 'test1'@'localhost';
# Create user with root access
CREATE USER 'test2'@'localhost' IDENTIFIED BY '123';
GRANT ALL ON *.* TO 'test2'@'localhost';

# check when datadir and index dir are specified
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
EVAL CREATE TABLE otherlocation (id int PRIMARY KEY)
ENGINE=InnoDB , $data_index_directory;
INSERT INTO otherlocation VALUES (1),(2),(3);
SELECT * FROM otherlocation ORDER BY id;

#SHOW ENGINE INNODB STATUS;

#

let $restart_parameters = restart: --innodb-read-only;
--source include/restart_mysqld.inc

SET GLOBAL innodb_file_per_table = 1;

# Nothing to do with wl64645.non-InnoDB issue. But need to document in QA note.
CREATE USER 'test3'@'localhost' IDENTIFIED BY '123';
GRANT ALL ON testdb_wl6445.* TO 'test3'@'localhost';

USE testdb_wl6445;
SELECT i FROM t1 ORDER BY i;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;

--echo # connection con_test1_user try to modify
--connect (con_test1_user,'localhost','test1','123',)
SELECT user();
USE testdb_wl6445;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
--ERROR ER_INNODB_READ_ONLY
CREATE TABLE t2 ( i int ,j blob) ENGINE = Innodb;
--ERROR ER_CANT_LOCK
UPDATE t1 SET i = i+1;

--echo # disconnect con_test1_user
--disconnect con_test1_user


--echo # connection con_test2_user
--connect (con_test2_user,'localhost','test2','123',)
SELECT user();
USE testdb_wl6445;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
--ERROR ER_INNODB_READ_ONLY
CREATE TABLE t2 ( i int , j blob) ENGINE = Innodb;
--ERROR ER_CANT_LOCK
UPDATE t1 SET i = i+1;
# Fix in next revision - known ( no data returned)
#SHOW ENGINE INNODB STATUS;
FLUSH STATUS;
FLUSH LOGS;
FLUSH TABLES t1;
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;


--echo # disconnect con_test2_user
--disconnect con_test2_user


--echo # connection default
--connection default
USE testdb_wl6445;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
--ERROR ER_INNODB_READ_ONLY
CREATE TABLE t2 ( i int , j blob) ENGINE = Innodb;
--ERROR ER_CANT_LOCK
UPDATE t1 SET i = i+1;

# check with table having data and index directory specified
--ERROR ER_CANT_LOCK
INSERT INTO otherlocation VALUES (1),(2),(3);
SELECT * FROM otherlocation ORDER BY id;

# Fix in next revision - known ( no data returned)
# SHOW ENGINE INNODB STATUS;
FLUSH STATUS;
FLUSH LOGS;
FLUSH TABLES t1;
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;


#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
#

let $restart_parameters = restart;
--source include/restart_mysqld.inc
DROP USER 'test1'@'localhost';
DROP USER 'test2'@'localhost';
DROP USER 'test3'@'localhost';
DROP DATABASE testdb_wl6445;


#------------------------------------------------------------------------------
# Testcase 2 covers
# a) Create table/data , perform transaction , restart server in readonly mode
# b) verfiy DDL/DML/DCL in read only mode
#------------------------------------------------------------------------------
--echo case # 2
CREATE DATABASE testdb_wl6445;

SET GLOBAL innodb_file_per_table = 1;
USE testdb_wl6445;
CREATE TABLE t1 ( i int PRIMARY KEY , j blob) ENGINE = InnoDB;
INSERT INTO t1 VALUES (1,repeat('a',4000)),(2,repeat('b',4000)),(3,repeat('c',4000));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;


START TRANSACTION;
let $counter= 50;
--disable_query_log
while ($counter>3) {
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --dec $counter
}
--enable_query_log
SAVEPOINT A;
let $counter= 100;
--disable_query_log
while ($counter>50) {
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --dec $counter
}
--enable_query_log
SAVEPOINT B;
ROLLBACK TO A;
--echo "---commit first 50 records "
COMMIT;


SELECT COUNT(*) FROM testdb_wl6445.t1;
#SHOW ENGINE INNODB STATUS;

#

let $restart_parameters = restart: --innodb-read-only;
--source include/restart_mysqld.inc

USE testdb_wl6445;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (211,repeat('a',200)),(212,repeat('b',200)),(213,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 WHERE i%10=0 ORDER BY i;
--ERROR ER_INNODB_READ_ONLY
CREATE TABLE t2 ( i int , j blob) ENGINE = Innodb;
--ERROR ER_CANT_LOCK
UPDATE t1 SET i = i+1;

SELECT i,LEFT(j,20) FROM t1  WHERE i%10=0  ORDER BY i;

# Check with transaction in read-only mode with innodb_flush_log_at_trx_commit=0
START TRANSACTION;
SET GLOBAL innodb_flush_log_at_trx_commit = 0;
let $counter= 200;
--disable_query_log
while ($counter>150) {
   --ERROR ER_CANT_LOCK
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --ERROR ER_CANT_LOCK
   UPDATE testdb_wl6445.t1 SET i = i + 1;
   --ERROR ER_CANT_LOCK
   DELETE FROM testdb_wl6445.t1;
   --dec $counter
}
--enable_query_log
SAVEPOINT A;
let $counter= 250;
--disable_query_log
while ($counter>200) {
   --ERROR ER_CANT_LOCK
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --ERROR ER_CANT_LOCK
   UPDATE testdb_wl6445.t1 SET i = i + 1;
   --ERROR ER_CANT_LOCK
   DELETE FROM testdb_wl6445.t1;
   --dec $counter
}
--enable_query_log
SAVEPOINT B;
ROLLBACK TO A;
--echo "---commit first 50 records with innodb_flush_log_at_trx_commit = 0 --"
COMMIT;

SELECT i,LEFT(j,20) FROM t1  WHERE i%10=0  ORDER BY i;

# Check with transaction in read-only mode with innodb_flush_log_at_trx_commit=1
START TRANSACTION;
SET GLOBAL innodb_flush_log_at_trx_commit = 1;
let $counter= 200;
--disable_query_log
while ($counter>150) {
   --ERROR ER_CANT_LOCK
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --ERROR ER_CANT_LOCK
   UPDATE testdb_wl6445.t1 SET i = i + 1;
   --ERROR ER_CANT_LOCK
   DELETE FROM testdb_wl6445.t1;
   --dec $counter
}
--enable_query_log
SAVEPOINT A;
let $counter= 250;
--disable_query_log
while ($counter>200) {
   --ERROR ER_CANT_LOCK
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --ERROR ER_CANT_LOCK
   UPDATE testdb_wl6445.t1 SET i = i + 1;
   --ERROR ER_CANT_LOCK
   DELETE FROM testdb_wl6445.t1;
   --dec $counter
}
--enable_query_log
SAVEPOINT B;
ROLLBACK TO A;
--echo "---commit first 50 records with innodb_flush_log_at_trx_commit = 1 --"
COMMIT;

SELECT i,LEFT(j,20) FROM t1  WHERE i%10=0  ORDER BY i;

# Check with transaction in read-only mode with innodb_flush_log_at_trx_commit=2
START TRANSACTION;
SET GLOBAL innodb_flush_log_at_trx_commit = 2;
let $counter= 200;
--disable_query_log
while ($counter>150) {
   --ERROR ER_CANT_LOCK
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --ERROR ER_CANT_LOCK
   UPDATE testdb_wl6445.t1 SET i = i + 1;
   --ERROR ER_CANT_LOCK
   DELETE FROM testdb_wl6445.t1;
   --dec $counter
}
--enable_query_log
SAVEPOINT A;
let $counter= 250;
--disable_query_log
while ($counter>200) {
   --ERROR ER_CANT_LOCK
   EVAL INSERT INTO testdb_wl6445.t1 VALUES ($counter,repeat(CONCAT('a',$counter),2000));
   --ERROR ER_CANT_LOCK
   UPDATE testdb_wl6445.t1 SET i = i + 1;
   --ERROR ER_CANT_LOCK
   DELETE FROM testdb_wl6445.t1;
   --dec $counter
}
--enable_query_log
SAVEPOINT B;
ROLLBACK TO A;
--echo "---commit first 50 records with innodb_flush_log_at_trx_commit = 2 --"
COMMIT;


# Fix in next revision - known ( no data returned)
# SHOW ENGINE INNODB STATUS;
FLUSH STATUS;
FLUSH LOGS;
FLUSH TABLES t1;
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;

#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
#
let $restart_parameters = restart;
--source include/restart_mysqld.inc
DROP DATABASE testdb_wl6445;

#------------------------------------------------------------------------------
# Testcase 3 covers
# a) Create table/data with trigger & procedure, partitioned table
# b) restart server in readonly mode
# c) verfiy behavior with trigger,procedure,partitioned and temp table
#------------------------------------------------------------------------------
--echo case # 3
CREATE DATABASE testdb_wl6445;
USE testdb_wl6445;
CREATE TABLE t1 ( i int PRIMARY KEY , j blob) ENGINE = InnoDB;
CREATE TABLE t2 ( t2_i int PRIMARY KEY , t2_j blob) ENGINE = InnoDB;
CREATE TABLE t3 ( i int PRIMARY KEY , j VARCHAR(20)) ENGINE = InnoDB;

# create partitioned table
CREATE TABLE t4 (val INT)
PARTITION BY LIST(val)(
         PARTITION mypart_odd VALUES IN (1,3,5),
         PARTITION MyPart_even VALUES IN (2,4,6));
INSERT INTO testdb_wl6445.t4 VALUES (1),(2),(3),(4),(5),(6);
SELECT * FROM testdb_wl6445.t4 ORDER BY val;

DELIMITER //;
CREATE TRIGGER TRIGGER_1 BEFORE INSERT ON testdb_wl6445.t1 FOR EACH ROW BEGIN
INSERT INTO testdb_wl6445.t2 SET t2_i = NEW.i , t2_j = NEW.j;
END;//
CREATE PROCEDURE proc1 (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM testdb_wl6445.t1;
END;//
CREATE PROCEDURE proc2 (IN param1 INT,IN param2 VARCHAR(20))
BEGIN
INSERT INTO testdb_wl6445.t3 VALUES (param1,param2);
END;//
DELIMITER ;//

INSERT INTO t1 VALUES (1,repeat('a',200)),(2,repeat('b',200)),(3,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
SELECT t2_i,LEFT(t2_j,20) FROM t2 ORDER BY t2_i;
CALL proc1(@a);
SELECT @a;
CALL proc2(1,'test1');
SELECT * FROM t3;

#SHOW ENGINE INNODB STATUS;

#

let $restart_parameters = restart: --innodb-read-only;
--source include/restart_mysqld.inc

SET GLOBAL innodb_file_per_table = 1;
USE testdb_wl6445;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
SELECT t2_i,LEFT(t2_j,20) FROM t2 ORDER BY t2_i;
CALL proc1(@a);
SELECT @a;
--ERROR ER_CANT_LOCK
CALL proc2(2,'test2');
SELECT * FROM t3;

# try to CREATE temp table
--ERROR ER_INNODB_READ_ONLY
CREATE TEMPORARY TABLE temp_1 ( i INT ) ENGINE = Innodb;

# Try to insert with partitioned table
--ERROR ER_CANT_LOCK
INSERT INTO testdb_wl6445.t4 VALUES (1),(2),(3),(4),(5),(6);
SELECT * FROM testdb_wl6445.t4 ORDER BY val;

FLUSH STATUS;
FLUSH LOGS;
FLUSH TABLES t1,t2,t3;
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;


#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
#

let $restart_parameters = restart;
--source include/restart_mysqld.inc
DROP DATABASE testdb_wl6445;

#------------------------------------------------------------------------------
# Testcase 4 covers
# a) Create table/data restart server in readonly mode
# b) check the effect of server variables impacting change of RO
#    ( they will be ignored)
#------------------------------------------------------------------------------
--echo case # 4
CREATE DATABASE testdb_wl6445;
USE testdb_wl6445;
CREATE TABLE t1 ( i int PRIMARY KEY , j VARCHAR(300), FULLTEXT KEY (j)) ENGINE = InnoDB;
CREATE INDEX idx1 ON testdb_wl6445.t1(i);
INSERT INTO t1 VALUES (1,repeat('a',200)),(2,repeat('b',200)),(3,repeat('c',200));
INSERT INTO t1 VALUES (4,'mysql database'),(5,'mysql database innodb support'),(6,'innodb engine');
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;

#FTS Query
SELECT * FROM t1 WHERE MATCH (j) AGAINST ('mysql (+database -innodb)' IN BOOLEAN MODE) ;

# store initial values
let $innodb_max_purge_lag_orig = `SELECT @@innodb_max_purge_lag`;
let $innodb_max_purge_lag_delay_orig = `SELECT @@innodb_max_purge_lag_delay`;
let $innodb_purge_batch_size_orig = `select @@innodb_purge_batch_size`;
let $innodb_purge_threads_orig = `SELECT @@innodb_purge_threads`;
let $relay_log_purge_orig = `select @@relay_log_purge`;
let $innodb_buffer_pool_size_orig = `select @@innodb_buffer_pool_size`;
let $innodb_change_buffer_max_size_orig = `select @@innodb_change_buffer_max_size`;
let $innodb_change_buffering_orig = `select @@innodb_change_buffering`;
let $innodb_print_all_deadlocks_orig = `select @@innodb_print_all_deadlocks`;


let $restart_parameters = restart: --innodb-read-only --innodb_purge_threads=5 --innodb_buffer_pool_size=16M;
--source include/restart_mysqld.inc

SET GLOBAL innodb_max_purge_lag = 10;
SET GLOBAL innodb_max_purge_lag_delay = 10;
SET GLOBAL innodb_purge_batch_size = 600;
# purge thread is read only variable
#SET GLOBAL innodb_purge_threads = 5;
SET GLOBAL relay_log_purge = 0;
SET GLOBAL innodb_change_buffer_max_size = 30;
SET GLOBAL innodb_change_buffering = 'changes';
SET GLOBAL innodb_print_all_deadlocks = 'ON';


USE testdb_wl6445;
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (1,repeat('a',200)),(2,repeat('b',200)),(3,repeat('c',200));
--ERROR ER_CANT_LOCK
UPDATE t1 SET i = i + 1;
--ERROR ER_CANT_LOCK
DELETE FROM t1 ;


SELECT @@innodb_max_purge_lag,@@innodb_max_purge_lag_delay,@@innodb_purge_batch_size,
@@innodb_purge_threads,@@relay_log_purge,@@innodb_buffer_pool_size,
@@innodb_change_buffer_max_size,@@innodb_change_buffering,@@innodb_print_all_deadlocks;

SELECT i,LEFT(j,20) FROM t1 ORDER BY i;

#FTS Query
SELECT * FROM t1 WHERE MATCH (j) AGAINST ('mysql (+database -innodb)' IN BOOLEAN MODE) ;
SELECT * FROM t1 WHERE MATCH (j) AGAINST ('innodb') ;

# restore initial values
--disable_query_log
eval SET GLOBAL innodb_max_purge_lag=$innodb_max_purge_lag_orig;
eval SET GLOBAL innodb_max_purge_lag_delay=$innodb_max_purge_lag_delay_orig;
eval SET GLOBAL innodb_purge_batch_size = $innodb_purge_batch_size_orig;
#eval SET GLOBAL innodb_purge_threads = $innodb_purge_threads_orig;
eval SET GLOBAL relay_log_purge = $relay_log_purge_orig;
eval SET GLOBAL innodb_change_buffer_max_size = $innodb_change_buffer_max_size_orig;
eval SET GLOBAL innodb_change_buffering = $innodb_change_buffering_orig;
eval SET GLOBAL innodb_print_all_deadlocks = $innodb_print_all_deadlocks_orig;
--enable_query_log


#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
#

let $restart_parameters = restart;
--source include/restart_mysqld.inc
DROP DATABASE testdb_wl6445;

#------------------------------------------------------------------------------
# Testcase 5 covers
# a) Create table/data restart server in readonly mode
# b) check starting with both --read-only and --innodb-read-only
# c) check starting with only --read-only
#------------------------------------------------------------------------------
--echo case # 5
CREATE DATABASE testdb_wl6445;
USE testdb_wl6445;
CREATE TABLE t1 ( i int PRIMARY KEY , j VARCHAR(300), FULLTEXT KEY (j)) ENGINE = InnoDB;
CREATE INDEX idx1 ON testdb_wl6445.t1(i);
INSERT INTO t1 VALUES (1,repeat('a',200)),(2,repeat('b',200)),(3,repeat('c',200));
INSERT INTO t1 VALUES (4,'mysql database'),(5,'mysql database innodb support'),(6,'innodb engine');
#FTS Query
SELECT * FROM t1 WHERE MATCH (j) AGAINST ('mysql (+database -innodb)' IN BOOLEAN MODE) ;
SELECT * FROM t1 WHERE MATCH (j) AGAINST ('innodb') ;

let $restart_parameters = restart: --innodb-read-only --read-only;
--source include/restart_mysqld.inc
USE testdb_wl6445;
show tables;
select * from t1 where i = 4;
# check if root user able to modify
--ERROR ER_CANT_LOCK
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
--ERROR ER_CANT_LOCK
UPDATE t1 SET i = i + 20;
--ERROR ER_CANT_LOCK
DELETE FROM t1;
--ERROR ER_INNODB_READ_ONLY
CREATE TABLE t2 ( i INT ) ENGINE = Innodb;
CREATE USER 'test5'@'localhost' IDENTIFIED BY '123';
GRANT ALL ON testdb_wl6445.* TO 'test5'@'localhost';

let $restart_parameters = restart: --read-only;
--source include/restart_mysqld.inc
USE testdb_wl6445;
# check if root user able to do DML/DDL
INSERT INTO t1 VALUES (11,repeat('a',200)),(12,repeat('b',200)),(13,repeat('c',200));
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
UPDATE t1 SET i = i + 20;
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
DELETE FROM t1;
SELECT i,LEFT(j,20) FROM t1 ORDER BY i;
CREATE TABLE t2 ( i INT ) ENGINE = Innodb;
CREATE USER 'test5_2'@'localhost' IDENTIFIED BY '123';
GRANT ALL ON testdb_wl6445.* TO 'test5_2'@'localhost';


#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
#

let $restart_parameters = restart;
--source include/restart_mysqld.inc
DROP USER 'test5_2'@'localhost';
DROP USER 'test5'@'localhost';
DROP DATABASE testdb_wl6445;

#------------------------------------------------------------------------------
# Testcase 6 covers
# a) Create table/data restart server in readonly mode
# b) check mysqldump/mysqlimport work
#------------------------------------------------------------------------------
--echo case # 6
CREATE DATABASE testdb_wl6445;
USE testdb_wl6445;
CREATE TABLE t1 ( i int PRIMARY KEY ) ENGINE = InnoDB;
CREATE INDEX idx1 ON testdb_wl6445.t1(i);
INSERT INTO t1 VALUES (1),(2),(3);
SELECT i FROM t1 ORDER BY i;

--echo # Creating a temp sql file to be loaded.
--write_file $MYSQLTEST_VARDIR/tmp/t1.sql
11
12
13
EOF


let $restart_parameters = restart: --innodb-read-only;
--source include/restart_mysqld.inc

USE testdb_wl6445;
# try mysql import
--replace_regex /.*Error//i
--error 1
--exec $MYSQL_IMPORT -uroot testdb_wl6445 $MYSQLTEST_VARDIR/tmp/t1.sql 2>&1
# only 3 records get in select as import shoudl fail due to --innodb-read-only
SELECT i FROM t1 ORDER BY i;


# mysqldump works
--exec $MYSQL_DUMP --skip-comments --databases testdb_wl6445 > $MYSQLTEST_VARDIR/tmp/testdb_wl6445_dump.txt

--error 0,1
--remove_file $MYSQLTEST_VARDIR/tmp/testdb_wl6445_dump.txt
--error 0,1
--remove_file $MYSQLTEST_VARDIR/tmp/t1.sql

#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
let $restart_parameters = restart;
--source include/restart_mysqld.inc
DROP DATABASE testdb_wl6445;
--rmdir $MYSQL_TMP_DIR/alt_dir/testdb_wl6445
--rmdir $MYSQL_TMP_DIR/alt_dir
--disable_query_log
eval SET GLOBAL INNODB_FILE_PER_TABLE=$innodb_file_per_table;
eval SET GLOBAL innodb_flush_log_at_trx_commit = $innodb_flush_log_at_trx_commit_orig;
call mtr.add_suppression("deleting orphaned .ibd file");
call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot open datafile for read-only:");
call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 2 in a file operation.");
call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means the system cannot find the path specified.");
call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them.");
--enable_query_log


#------------------------------------------------------------------------------
# Testcase 7 covers
# a) Create/Load table in normal mode such that index level > 1.
# b) Restart server in read-only mode and try to check validity of table/data.
#------------------------------------------------------------------------------
--echo case # 7 (restart server in read-only mode and perform check table)
use test;
#
create table t1 (
	i int,
	f float,
	c char(100),
	b blob
	) engine = innodb;
#
delimiter |;
CREATE PROCEDURE populate_t1()
BEGIN
        DECLARE i INT DEFAULT 1;
        while (i <= 100) DO
                insert into t1 values (
		i, 2.323,
		'adfaqfafafafafsasfafsa',
		'badfadfsaeerer234234asdfdsafdasr2354234324234234');
                SET i = i + 1;
        END WHILE;
END|
delimiter ;|
begin;
call populate_t1();
commit;
check table t1 extended;
#
#
let $restart_parameters = restart: --innodb-read-only;
--source include/restart_mysqld.inc
#
check table t1 extended;

#------------------------------------------------------------------------------
# clean-up
#------------------------------------------------------------------------------
let $restart_parameters = restart;
--source include/restart_mysqld.inc
check table t1 extended;
drop table t1;
drop procedure populate_t1;

Man Man