mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			204 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| FLUSH TABLES;
 | |
| #
 | |
| # MDEV-11369: Instant ADD COLUMN for InnoDB
 | |
| #
 | |
| CREATE TABLE t1(id INT PRIMARY KEY, c2 INT UNIQUE)
 | |
| ENGINE=InnoDB STATS_PERSISTENT=0 ROW_FORMAT=REDUNDANT;
 | |
| CREATE TABLE t2 LIKE t1;
 | |
| INSERT INTO t1 VALUES(0,2);
 | |
| INSERT INTO t2 VALUES(2,1);
 | |
| ALTER TABLE t2 ADD COLUMN (c3 TEXT NOT NULL DEFAULT 'De finibus bonorum');
 | |
| BEGIN;
 | |
| INSERT INTO t2 VALUES(3,4,'accusantium doloremque laudantium');
 | |
| connect ddl, localhost, root;
 | |
| SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
 | |
| ALTER TABLE t1 ADD COLUMN (c3 TEXT NOT NULL DEFAULT ' et malorum');
 | |
| connection default;
 | |
| SET DEBUG_SYNC='now WAIT_FOR ddl';
 | |
| SET GLOBAL innodb_flush_log_at_trx_commit=1;
 | |
| COMMIT;
 | |
| # Kill the server
 | |
| disconnect ddl;
 | |
| # restart
 | |
| SELECT * FROM t1;
 | |
| id	c2
 | |
| 0	2
 | |
| SELECT * FROM t2;
 | |
| id	c2	c3
 | |
| 2	1	De finibus bonorum
 | |
| 3	4	accusantium doloremque laudantium
 | |
| BEGIN;
 | |
| DELETE FROM t1;
 | |
| ROLLBACK;
 | |
| InnoDB		0 transactions not purged
 | |
| INSERT INTO t2 VALUES
 | |
| (16,1551,'Omnium enim rerum'),(128,1571,' principia parva sunt');
 | |
| BEGIN;
 | |
| UPDATE t1 SET c2=c2+1;
 | |
| connect ddl, localhost, root;
 | |
| SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
 | |
| ALTER TABLE t2 DROP COLUMN c3, ADD COLUMN c5 TEXT DEFAULT 'naturam abhorrere';
 | |
| connection default;
 | |
| SET DEBUG_SYNC='now WAIT_FOR ddl';
 | |
| SET GLOBAL innodb_flush_log_at_trx_commit=1;
 | |
| COMMIT;
 | |
| # Kill the server
 | |
| disconnect ddl;
 | |
| # restart
 | |
| SELECT * FROM t1;
 | |
| id	c2
 | |
| 0	3
 | |
| SELECT * FROM t2;
 | |
| id	c2	c3
 | |
| 2	1	De finibus bonorum
 | |
| 3	4	accusantium doloremque laudantium
 | |
| 16	1551	Omnium enim rerum
 | |
| 128	1571	 principia parva sunt
 | |
| BEGIN;
 | |
| INSERT INTO t1 SET id=1;
 | |
| DELETE FROM t2;
 | |
| ROLLBACK;
 | |
| InnoDB		0 transactions not purged
 | |
| INSERT INTO t2 VALUES (64,42,'De finibus bonorum'), (347,33101,' et malorum');
 | |
| BEGIN;
 | |
| DELETE FROM t1;
 | |
| connect ddl, localhost, root;
 | |
| ALTER TABLE t2 DROP COLUMN c3;
 | |
| SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
 | |
| ALTER TABLE t2 ADD COLUMN (c4 TEXT NOT NULL DEFAULT ' et malorum');
 | |
| connection default;
 | |
| SET DEBUG_SYNC='now WAIT_FOR ddl';
 | |
| SET GLOBAL innodb_flush_log_at_trx_commit=1;
 | |
| COMMIT;
 | |
| # Kill the server
 | |
| disconnect ddl;
 | |
| # restart
 | |
| FOUND 3 /\[Note\] InnoDB: Rolled back recovered transaction / in mysqld.1.err
 | |
| SELECT * FROM t1;
 | |
| id	c2
 | |
| SELECT * FROM t2;
 | |
| id	c2
 | |
| 2	1
 | |
| 3	4
 | |
| 64	42
 | |
| 16	1551
 | |
| 128	1571
 | |
| 347	33101
 | |
| BEGIN;
 | |
| INSERT INTO t1 SET id=1;
 | |
| DELETE FROM t2;
 | |
| ROLLBACK;
 | |
| InnoDB		0 transactions not purged
 | |
| FLUSH TABLE t1,t2 FOR EXPORT;
 | |
| t1 clustered index root page(type 17855):
 | |
| N_RECS=0; LEVEL=0
 | |
| header=0x010000030074 (id=0x696e66696d756d00)
 | |
| header=0x010008030000 (id=0x73757072656d756d00)
 | |
| t2 clustered index root page(type 18):
 | |
| N_RECS=7; LEVEL=0
 | |
| header=0x01000003008f (id=0x0000000000000000)
 | |
| header=0x3000100c00d4 (id=0x80000000,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  BLOB=0x000000260000000000000008,
 | |
|  c2=NULL(4 bytes),
 | |
|  c3=0x44652066696e6962757320626f6e6f72756d)
 | |
| header=0x0000180900f4 (id=0x80000002,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  c2=0x80000001)
 | |
| header=0x0000200b0135 (id=0x80000003,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  c2=0x80000004,
 | |
|  c3=0x6163637573616e7469756d20646f6c6f72656d717565206c617564616e7469756d)
 | |
| header=0x0000280b0165 (id=0x80000010,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  c2=0x8000060f,
 | |
|  c3=0x4f6d6e69756d20656e696d20726572756d)
 | |
| header=0x000030090185 (id=0x80000040,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  c2=0x8000002a)
 | |
| header=0x0000380b01ba (id=0x80000080,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  c2=0x80000623,
 | |
|  c3=0x207072696e63697069612070617276612073756e74)
 | |
| header=0x0000400b0074 (id=0x8000015b,
 | |
|  DB_TRX_ID=0x000000000000,
 | |
|  DB_ROLL_PTR=0x80000000000000,
 | |
|  c2=0x8000814d,
 | |
|  c3=0x206574206d616c6f72756d)
 | |
| header=0x080008030000 (id=0x000000000000000100)
 | |
| UNLOCK TABLES;
 | |
| DELETE FROM t2;
 | |
| InnoDB		0 transactions not purged
 | |
| #
 | |
| # MDEV-24323 Crash on recovery after kill during instant ADD COLUMN
 | |
| #
 | |
| BEGIN;
 | |
| INSERT INTO t1 VALUES(0,0);
 | |
| connect ddl, localhost, root;
 | |
| CREATE TABLE t3(id INT PRIMARY KEY, c2 INT, v2 INT AS(c2) VIRTUAL, UNIQUE(v2))
 | |
| ENGINE=InnoDB;
 | |
| INSERT INTO t3 SET id=1,c2=1;
 | |
| SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
 | |
| ALTER TABLE t3 ADD COLUMN c3 TEXT NOT NULL DEFAULT 'sic transit gloria mundi';
 | |
| connection default;
 | |
| SET DEBUG_SYNC='now WAIT_FOR ddl';
 | |
| SET GLOBAL innodb_flush_log_at_trx_commit=1;
 | |
| COMMIT;
 | |
| # Kill the server
 | |
| disconnect ddl;
 | |
| # restart
 | |
| SHOW CREATE TABLE t1;
 | |
| Table	Create Table
 | |
| t1	CREATE TABLE `t1` (
 | |
|   `id` int(11) NOT NULL,
 | |
|   `c2` int(11) DEFAULT NULL,
 | |
|   PRIMARY KEY (`id`),
 | |
|   UNIQUE KEY `c2` (`c2`)
 | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci STATS_PERSISTENT=0 ROW_FORMAT=REDUNDANT
 | |
| SHOW CREATE TABLE t2;
 | |
| Table	Create Table
 | |
| t2	CREATE TABLE `t2` (
 | |
|   `id` int(11) NOT NULL,
 | |
|   `c2` int(11) DEFAULT NULL,
 | |
|   PRIMARY KEY (`id`),
 | |
|   UNIQUE KEY `c2` (`c2`)
 | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci STATS_PERSISTENT=0 ROW_FORMAT=REDUNDANT
 | |
| SHOW CREATE TABLE t3;
 | |
| Table	Create Table
 | |
| t3	CREATE TABLE `t3` (
 | |
|   `id` int(11) NOT NULL,
 | |
|   `c2` int(11) DEFAULT NULL,
 | |
|   `v2` int(11) GENERATED ALWAYS AS (`c2`) VIRTUAL,
 | |
|   PRIMARY KEY (`id`),
 | |
|   UNIQUE KEY `v2` (`v2`)
 | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
 | |
| DROP TABLE t2,t3;
 | |
| #
 | |
| # MDEV-29440 InnoDB instant ALTER TABLE recovery wrongly uses
 | |
| #            READ COMMITTED isolation level instead of READ UNCOMMITTED
 | |
| #
 | |
| CREATE TABLE t2(a INT UNSIGNED PRIMARY KEY) ENGINE=InnoDB;
 | |
| INSERT INTO t2 VALUES (1),(2),(3),(4),(5),(6);
 | |
| BEGIN;
 | |
| DELETE FROM t1;
 | |
| connect ddl, localhost, root;
 | |
| SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
 | |
| ALTER TABLE t2 ADD COLUMN b TINYINT UNSIGNED NOT NULL DEFAULT 42 FIRST;
 | |
| connection default;
 | |
| SET DEBUG_SYNC='now WAIT_FOR ddl';
 | |
| SET GLOBAL innodb_flush_log_at_trx_commit=1;
 | |
| COMMIT;
 | |
| # Kill the server
 | |
| disconnect ddl;
 | |
| # restart
 | |
| CHECK TABLE t2;
 | |
| Table	Op	Msg_type	Msg_text
 | |
| test.t2	check	status	OK
 | |
| DROP TABLE t1,t2;
 | |
| db.opt
 | 
