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)! SELECT * FROM t; a 3 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM t; a 3 SET GLOBAL innodb_max_purge_lag_wait=0; # restart SELECT * FROM t; a 3 DROP TABLE t;