mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	innodb_autoinc_lock_mode = 2 innodb_buffer_pool_dump_at_shutdown = ON innodb_buffer_pool_dump_pct = 25 innodb_buffer_pool_load_at_startup = ON innodb_checksum_algorithm = CRC32 innodb_file_format = Barracuda innodb_large_prefix = ON innodb_log_compressed_pages = ON innodb_purge_threads = 4 innodb_strict_mode = ON binlog_annotate_row_events = ON binlog_format = MIXED binlog-row-event-max-size = 8192 group_concat_max_len = 1M lock_wait_timeout = 86400 log_slow_admin_statements = ON log_slow_slave_statements = ON log_warnings = 2 max_allowed_packet = 16M replicate_annotate_row_events = ON slave_net_timeout = 60 sync_binlog = 1 aria_recover = BACKUP,QUICK myisam_recover_options = BACKUP,QUICK
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
set @old_innodb_lock_wait_timeout=@@global.innodb_lock_wait_timeout;
 | 
						|
set global innodb_lock_wait_timeout=300;
 | 
						|
set session innodb_lock_wait_timeout=300;
 | 
						|
call mtr.add_suppression("Deadlock found when trying to get lock; try restarting transaction");
 | 
						|
#
 | 
						|
# Bug #22876 Four-way deadlock
 | 
						|
#
 | 
						|
DROP TABLE IF EXISTS t1;
 | 
						|
connect  con1,localhost,root,,;
 | 
						|
connect  con2,localhost,root,,;
 | 
						|
connect  con3,localhost,root,,;
 | 
						|
connection con1;
 | 
						|
set @@autocommit=0;
 | 
						|
CREATE TABLE t1(s1 INT UNIQUE) ENGINE=innodb;
 | 
						|
INSERT INTO t1 VALUES (1);
 | 
						|
connection con2;
 | 
						|
set @@autocommit=0;
 | 
						|
INSERT INTO t1 VALUES (2);
 | 
						|
INSERT INTO t1 VALUES (1);
 | 
						|
connection con3;
 | 
						|
set @@autocommit=0;
 | 
						|
DROP TABLE t1;
 | 
						|
connection con1;
 | 
						|
# Connection 1 is now holding the lock.
 | 
						|
# Issuing insert from connection 1 while connection 2&3 
 | 
						|
# is waiting for the lock should give a deadlock error.
 | 
						|
INSERT INTO t1 VALUES (2);
 | 
						|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
 | 
						|
# Cleanup
 | 
						|
connection con2;
 | 
						|
commit;
 | 
						|
set @@autocommit=1;
 | 
						|
connection con1;
 | 
						|
commit;
 | 
						|
set @@autocommit=1;
 | 
						|
connection con3;
 | 
						|
set @@autocommit=1;
 | 
						|
connection default;
 | 
						|
disconnect con1;
 | 
						|
disconnect con2;
 | 
						|
disconnect con3;
 | 
						|
#
 | 
						|
# Test for bug #37346 "innodb does not detect deadlock between update
 | 
						|
#                      and alter table".
 | 
						|
#
 | 
						|
drop table if exists t1;
 | 
						|
create table t1 (c1 int primary key, c2 int, c3 int) engine=InnoDB;
 | 
						|
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0);
 | 
						|
begin;
 | 
						|
# Run statement which acquires X-lock on one of table's rows.
 | 
						|
update t1 set c3=c3+1 where c2=3;
 | 
						|
#
 | 
						|
connect  con37346,localhost,root,,test,,;
 | 
						|
connection con37346;
 | 
						|
# The below ALTER TABLE statement should wait till transaction
 | 
						|
# in connection 'default' is complete and then succeed.
 | 
						|
# It should not deadlock or fail with ER_LOCK_DEADLOCK error.
 | 
						|
# Sending:
 | 
						|
alter table t1 add column c4 int;;
 | 
						|
#
 | 
						|
connection default;
 | 
						|
# Wait until the above ALTER TABLE gets blocked because this
 | 
						|
# connection holds SW metadata lock on table to be altered.
 | 
						|
# The below statement should succeed. It should not
 | 
						|
# deadlock or end with ER_LOCK_DEADLOCK error.
 | 
						|
update t1 set c3=c3+1 where c2=4;
 | 
						|
# Unblock ALTER TABLE by committing transaction.
 | 
						|
commit;
 | 
						|
#
 | 
						|
connection con37346;
 | 
						|
# Reaping ALTER TABLE.
 | 
						|
#
 | 
						|
connection default;
 | 
						|
disconnect con37346;
 | 
						|
drop table t1;
 | 
						|
#
 | 
						|
# Bug#53798 OPTIMIZE TABLE breaks repeatable read
 | 
						|
#
 | 
						|
DROP TABLE IF EXISTS t1;
 | 
						|
CREATE TABLE t1 (a INT) engine=innodb;
 | 
						|
INSERT INTO t1 VALUES (1), (2), (3);
 | 
						|
connect  con1, localhost, root;
 | 
						|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
 | 
						|
SELECT * FROM t1;
 | 
						|
a
 | 
						|
1
 | 
						|
2
 | 
						|
3
 | 
						|
connection default;
 | 
						|
# This should block
 | 
						|
# Sending:
 | 
						|
OPTIMIZE TABLE t1;
 | 
						|
connection con1;
 | 
						|
SELECT * FROM t1;
 | 
						|
a
 | 
						|
1
 | 
						|
2
 | 
						|
3
 | 
						|
COMMIT;
 | 
						|
connection default;
 | 
						|
# Reaping OPTIMIZE TABLE t1
 | 
						|
Table	Op	Msg_type	Msg_text
 | 
						|
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
 | 
						|
test.t1	optimize	status	OK
 | 
						|
disconnect con1;
 | 
						|
DROP TABLE t1;
 | 
						|
#
 | 
						|
# Bug#49891 View DDL breaks REPEATABLE READ
 | 
						|
#
 | 
						|
DROP TABLE IF EXISTS t1, t2;
 | 
						|
DROP VIEW IF EXISTS v2;
 | 
						|
CREATE TABLE t1 ( f1 INTEGER ) ENGINE = innodb;
 | 
						|
CREATE TABLE t2 ( f1 INTEGER );
 | 
						|
CREATE VIEW v1 AS SELECT 1 FROM t1;
 | 
						|
connect  con2, localhost, root;
 | 
						|
connect  con3, localhost, root;
 | 
						|
connection con3;
 | 
						|
LOCK TABLE t1 WRITE;
 | 
						|
connection default;
 | 
						|
START TRANSACTION;
 | 
						|
# Sending:
 | 
						|
SELECT * FROM v1;
 | 
						|
connection con2;
 | 
						|
# Waiting for 'SELECT * FROM v1' to sync in.
 | 
						|
# Sending:
 | 
						|
ALTER VIEW v1 AS SELECT 2 FROM t2;
 | 
						|
connection con3;
 | 
						|
# Waiting for 'ALTER VIEW v1 AS SELECT 2 FROM t2' to sync in.
 | 
						|
UNLOCK TABLES;
 | 
						|
connection default;
 | 
						|
# Reaping: SELECT * FROM v1
 | 
						|
1
 | 
						|
SELECT * FROM v1;
 | 
						|
1
 | 
						|
COMMIT;
 | 
						|
connection con2;
 | 
						|
# Reaping: ALTER VIEW v1 AS SELECT 2 FROM t2
 | 
						|
connection default;
 | 
						|
DROP TABLE t1, t2;
 | 
						|
DROP VIEW v1;
 | 
						|
disconnect con2;
 | 
						|
disconnect con3;
 | 
						|
#
 | 
						|
# Bug#11815600 [ERROR] INNODB COULD NOT FIND INDEX PRIMARY
 | 
						|
#              KEY NO 0 FOR TABLE IN ERROR LOG 
 | 
						|
#
 | 
						|
DROP TABLE IF EXISTS t1;
 | 
						|
connect  con1,localhost,root;
 | 
						|
connection default;
 | 
						|
CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB;
 | 
						|
INSERT INTO t1 VALUES (1, 12345);
 | 
						|
START TRANSACTION;
 | 
						|
SELECT * FROM t1;
 | 
						|
id	value
 | 
						|
1	12345
 | 
						|
connection con1;
 | 
						|
SET lock_wait_timeout=1;
 | 
						|
ALTER TABLE t1 ADD INDEX idx(value);
 | 
						|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
 | 
						|
ALTER TABLE t1 ADD INDEX idx(value);
 | 
						|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
 | 
						|
connection default;
 | 
						|
SELECT * FROM t1;
 | 
						|
id	value
 | 
						|
1	12345
 | 
						|
COMMIT;
 | 
						|
DROP TABLE t1;
 | 
						|
disconnect con1;
 | 
						|
set global innodb_lock_wait_timeout=@old_innodb_lock_wait_timeout;
 |