connect con1, localhost, root; CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB; INSERT INTO t VALUES(1); BEGIN; INSERT INTO t VALUES(2); DELETE FROM t WHERE a=2; connection default; # Normal MariaDB shutdown would roll back the above transaction. # We want the transaction to remain open, so we will kill the server # after ensuring that any non-transactional files are clean. FLUSH TABLES; # Ensure that the above incomplete transaction becomes durable. SET GLOBAL innodb_flush_log_at_trx_commit=1; BEGIN; INSERT INTO t VALUES(0); DELETE FROM t WHERE a=0; COMMIT; # restart: --innodb-force-recovery=3 disconnect con1; SELECT * FROM t; a 1 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM t; a 1 UPDATE t SET a=3 WHERE a=1; # restart: --innodb-read-only # Starting with MariaDB 10.2, innodb_read_only implies READ UNCOMMITTED. # In earlier versions, this would return the last committed version # (empty table)! SHOW VARIABLES LIKE "innodb_read_only"; Variable_name Value innodb_read_only ON SELECT * FROM t; a 3 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM t; a 3 SET GLOBAL innodb_max_purge_lag_wait=0; INSERT INTO mysql.innodb_index_stats SELECT * FROM mysql.innodb_index_stats LIMIT 0; Test Temp tablespace truncate in read only mode SET GLOBAL innodb_truncate_temporary_tablespace_now=1; # restart SELECT * FROM t; a 3 DROP TABLE t;