1054 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1054 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								# this test needs multithreaded mysqltest
							 | 
						|||
| 
								 | 
							
								-- source include/not_embedded.inc
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Basic log tables test
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that CSV engine was compiled in
							 | 
						|||
| 
								 | 
							
								--source include/have_csv.inc
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET @old_general_log_state = @@global.general_log;
							 | 
						|||
| 
								 | 
							
								SET @old_log_output=       @@global.log_output;
							 | 
						|||
| 
								 | 
							
								SET @old_slow_query_log=   @@global.slow_query_log;
							 | 
						|||
| 
								 | 
							
								SET @old_general_log=      @@global.general_log;
							 | 
						|||
| 
								 | 
							
								SET @old_long_query_time=  @@session.long_query_time;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_ps_protocol
							 | 
						|||
| 
								 | 
							
								use mysql;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Capture initial settings of system variables
							 | 
						|||
| 
								 | 
							
								# so that we can revert to old state after manipulation for testing
							 | 
						|||
| 
								 | 
							
								# NOTE:  PLEASE USE THESE VALUES TO 'RESET' SYSTEM VARIABLES
							 | 
						|||
| 
								 | 
							
								# Capturing old values within the tests results in loss of values
							 | 
						|||
| 
								 | 
							
								# due to people not paying attention to previous tests' changes, captures
							 | 
						|||
| 
								 | 
							
								# or improper cleanup
							 | 
						|||
| 
								 | 
							
								SET @saved_long_query_time = @@long_query_time;
							 | 
						|||
| 
								 | 
							
								SET @saved_log_output = @@log_output;
							 | 
						|||
| 
								 | 
							
								SET @saved_general_log = @@GLOBAL.general_log;
							 | 
						|||
| 
								 | 
							
								SET @saved_slow_query_log = @@GLOBAL.slow_query_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SELECT @saved_long_query_time, @saved_log_output, @saved_general_log, @saved_slow_query_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Check that log tables work and we can do basic selects. This also
							 | 
						|||
| 
								 | 
							
								# tests truncate, which works in a special mode with the log tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								truncate table general_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from general_log;
							 | 
						|||
| 
								 | 
							
								truncate table slow_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST
							 | 
						|||
| 
								 | 
							
								select * from slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# We want to check that a record newly written to a log table shows up for
							 | 
						|||
| 
								 | 
							
								# the query: since log tables use concurrent insert machinery and log tables
							 | 
						|||
| 
								 | 
							
								# are always locked by artificial THD, this feature requires additional
							 | 
						|||
| 
								 | 
							
								# check in ha_tina::write_row. This simple test should prove that the
							 | 
						|||
| 
								 | 
							
								# log table flag in the table handler is triggered and working.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								truncate table general_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from general_log where argument like '%general_log%';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Check some basic queries interfering with the log tables.
							 | 
						|||
| 
								 | 
							
								# In our test we'll use a tbale with verbose comments to the short
							 | 
						|||
| 
								 | 
							
								# command type names, used in the tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table join_test (verbose_comment varchar (80), command_type varchar(64));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into join_test values ("User performed a usual SQL query", "Query");
							 | 
						|||
| 
								 | 
							
								insert into join_test values ("New DB connection was registered", "Connect");
							 | 
						|||
| 
								 | 
							
								insert into join_test values ("Get the table info", "Field List");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--replace_column 2 USER_HOST
							 | 
						|||
| 
								 | 
							
								select verbose_comment, user_host, argument
							 | 
						|||
| 
								 | 
							
								  from  mysql.general_log join join_test
							 | 
						|||
| 
								 | 
							
								    on (mysql.general_log.command_type = join_test.command_type);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table join_test;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# check that flush of the log table work fine
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								flush logs;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# check locking of the log tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.general_log WRITE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.slow_log WRITE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# This attemts to get TL_READ_NO_INSERT lock, which is incompatible with
							 | 
						|||
| 
								 | 
							
								# TL_WRITE_CONCURRENT_INSERT. This should fail. We issue this error as log
							 | 
						|||
| 
								 | 
							
								# tables are always opened and locked by the logger.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.general_log READ;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.slow_log READ;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# This call should result in TL_READ lock on the log table.
							 | 
						|||
| 
								 | 
							
								# This is not ok and should fail.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.slow_log READ LOCAL, mysql.general_log READ LOCAL;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Misc locking tests
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								show create table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								show fields from mysql.general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								show create table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								show fields from mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# check that FLUSH LOGS does not flush the log tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								flush logs;
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL GENERAL_LOG=ON;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL SLOW_QUERY_LOG=ON;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								show open tables;
							 | 
						|||
| 
								 | 
							
								flush logs;
							 | 
						|||
| 
								 | 
							
								show open tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# check that FLUSH TABLES does flush the log tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								# Since the flush is logged, mysql.general_log will be in the cache
							 | 
						|||
| 
								 | 
							
								show open tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL GENERAL_LOG=OFF;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL SLOW_QUERY_LOG=OFF;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								# Here the table cache is empty
							 | 
						|||
| 
								 | 
							
								show open tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL GENERAL_LOG=ON;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL SLOW_QUERY_LOG=ON;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#23924 general_log truncates queries with character set introducers.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								truncate table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								set names binary;
							 | 
						|||
| 
								 | 
							
								select _koi8r'<27><><EFBFBD><EFBFBD>' as test;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from mysql.general_log;
							 | 
						|||
| 
								 | 
							
								set names utf8;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #16905    Log tables: unicode statements are logged incorrectly
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								truncate table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								set names utf8;
							 | 
						|||
| 
								 | 
							
								create table bug16905 (s char(15) character set utf8 default 'пусто');
							 | 
						|||
| 
								 | 
							
								insert into bug16905 values ('новое');
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from mysql.general_log;
							 | 
						|||
| 
								 | 
							
								drop table bug16905;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #17600: Invalid data logged into mysql.slow_log
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								truncate table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								set session long_query_time=1;
							 | 
						|||
| 
								 | 
							
								select sleep(2);
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
							 | 
						|||
| 
								 | 
							
								select * from mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								set @@session.long_query_time = @saved_long_query_time;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #18559 log tables cannot change engine, and gets deadlocked when
							 | 
						|||
| 
								 | 
							
								# dropping w/ log on
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that appropriate error messages are given when one attempts to alter
							 | 
						|||
| 
								 | 
							
								# or drop a log tables, while corresponding logs are enabled
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_LOG_STATEMENT
							 | 
						|||
| 
								 | 
							
								alter table mysql.general_log engine=myisam;
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_LOG_STATEMENT
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=myisam;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_LOG_STATEMENT
							 | 
						|||
| 
								 | 
							
								drop table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_LOG_STATEMENT
							 | 
						|||
| 
								 | 
							
								drop table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that one can alter log tables to MyISAM
							 | 
						|||
| 
								 | 
							
								set global general_log='OFF';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# cannot convert another log table
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_LOG_STATEMENT
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=myisam;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# alter both tables
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='OFF';
							 | 
						|||
| 
								 | 
							
								# check that both tables use CSV engine
							 | 
						|||
| 
								 | 
							
								show create table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								show create table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								alter table mysql.general_log engine=myisam;
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=myisam;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that the tables were converted
							 | 
						|||
| 
								 | 
							
								show create table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								show create table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# enable log tables and chek that new tables indeed work
							 | 
						|||
| 
								 | 
							
								set global general_log='ON';
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='ON';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from mysql.general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that flush of myisam-based log tables work fine
							 | 
						|||
| 
								 | 
							
								flush logs;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check locking of myisam-based log tables
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.general_log WRITE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.slow_log WRITE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# This attemts to get TL_READ_NO_INSERT lock, which is incompatible with
							 | 
						|||
| 
								 | 
							
								# TL_WRITE_CONCURRENT_INSERT. This should fail. We issue this error as log
							 | 
						|||
| 
								 | 
							
								# tables are always opened and locked by the logger.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.general_log READ;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables mysql.slow_log READ;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that we can drop them
							 | 
						|||
| 
								 | 
							
								set global general_log='OFF';
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='OFF';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that alter table doesn't work for other engines
							 | 
						|||
| 
								 | 
							
								set @save_storage_engine= @@session.storage_engine;
							 | 
						|||
| 
								 | 
							
								set storage_engine= MEMORY;
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPORTED_LOG_ENGINE
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=ndb;
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPORTED_LOG_ENGINE
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=innodb;
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPORTED_LOG_ENGINE
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=archive;
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPORTED_LOG_ENGINE
							 | 
						|||
| 
								 | 
							
								alter table mysql.slow_log engine=blackhole;
							 | 
						|||
| 
								 | 
							
								set storage_engine= @save_storage_engine;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								drop table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that table share cleanup is performed correctly (double drop)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_TABLE_ERROR
							 | 
						|||
| 
								 | 
							
								drop table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_TABLE_ERROR
							 | 
						|||
| 
								 | 
							
								drop table mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# recreate tables and enable logs
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use mysql;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE `general_log` (
							 | 
						|||
| 
								 | 
							
								  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
							 | 
						|||
| 
								 | 
							
								                         ON UPDATE CURRENT_TIMESTAMP,
							 | 
						|||
| 
								 | 
							
								  `user_host` mediumtext NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `thread_id` int(11) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `server_id` int(10) unsigned NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `command_type` varchar(64) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `argument` mediumtext NOT NULL
							 | 
						|||
| 
								 | 
							
								) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE `slow_log` (
							 | 
						|||
| 
								 | 
							
								  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
							 | 
						|||
| 
								 | 
							
								                         ON UPDATE CURRENT_TIMESTAMP,
							 | 
						|||
| 
								 | 
							
								  `user_host` mediumtext NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `query_time` time NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `lock_time` time NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `rows_sent` int(11) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `rows_examined` int(11) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `db` varchar(512) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `last_insert_id` int(11) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `insert_id` int(11) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `server_id` int(10) unsigned NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `sql_text` mediumtext NOT NULL
							 | 
						|||
| 
								 | 
							
								) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set global general_log='ON';
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='ON';
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #20139 Infinite loop after "FLUSH" and "LOCK tabX, general_log"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								flush tables with read lock;
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								use mysql;
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_LOCK_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								lock tables general_log read local, help_category read local;
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #17544 Cannot do atomic log rotate and
							 | 
						|||
| 
								 | 
							
								# Bug #21785 Server crashes after rename of the log table
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET SESSION long_query_time = 1000;
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists mysql.renamed_general_log;
							 | 
						|||
| 
								 | 
							
								drop table if exists mysql.renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								drop table if exists mysql.general_log_new;
							 | 
						|||
| 
								 | 
							
								drop table if exists mysql.slow_log_new;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use mysql;
							 | 
						|||
| 
								 | 
							
								# Should result in error
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_RENAME_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								RENAME TABLE general_log TO renamed_general_log;
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_RENAME_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								RENAME TABLE slow_log TO renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#check rotate logs
							 | 
						|||
| 
								 | 
							
								truncate table general_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								truncate table slow_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST
							 | 
						|||
| 
								 | 
							
								select * from slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table general_log_new like general_log;
							 | 
						|||
| 
								 | 
							
								rename table general_log TO renamed_general_log, general_log_new TO general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table slow_log_new like slow_log;
							 | 
						|||
| 
								 | 
							
								rename table slow_log TO renamed_slow_log, slow_log_new TO slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that rename checks more then first table in the list
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_RENAME_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								rename table general_log TO general_log_new, renamed_general_log TO general_log, slow_log to renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# now check the content of tables
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from general_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
							 | 
						|||
| 
								 | 
							
								select * from renamed_general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# the content of the slow log is empty, but we will try a select anyway
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST
							 | 
						|||
| 
								 | 
							
								select * from slow_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP 2 USER_HOST
							 | 
						|||
| 
								 | 
							
								select * from renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# check that we can do whatever we want with disabled log
							 | 
						|||
| 
								 | 
							
								set global general_log='OFF';
							 | 
						|||
| 
								 | 
							
								RENAME TABLE general_log TO general_log2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='OFF';
							 | 
						|||
| 
								 | 
							
								RENAME TABLE slow_log TO slow_log2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# this should fail
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_TABLE
							 | 
						|||
| 
								 | 
							
								set global general_log='ON';
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_TABLE
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='ON';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								RENAME TABLE general_log2 TO general_log;
							 | 
						|||
| 
								 | 
							
								RENAME TABLE slow_log2 TO slow_log;
							 | 
						|||
| 
								 | 
							
								SET SESSION long_query_time = @saved_long_query_time;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# this should work
							 | 
						|||
| 
								 | 
							
								set global general_log='ON';
							 | 
						|||
| 
								 | 
							
								set global slow_query_log='ON';
							 | 
						|||
| 
								 | 
							
								# now check flush logs
							 | 
						|||
| 
								 | 
							
								flush logs;
							 | 
						|||
| 
								 | 
							
								flush logs;
							 | 
						|||
| 
								 | 
							
								drop table renamed_general_log, renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#27858 (Failing to log to a log table doesn't log anything to error log)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# This test works as expected, it's a negative test.
							 | 
						|||
| 
								 | 
							
								# The message "[ERROR] Failed to write to mysql.general_log"
							 | 
						|||
| 
								 | 
							
								# is printed to master.err when writing to the table mysql.general_log
							 | 
						|||
| 
								 | 
							
								# failed.
							 | 
						|||
| 
								 | 
							
								# However, this message is picked up by mysql-test-run.pl,
							 | 
						|||
| 
								 | 
							
								# and reported as a test failure, which is a false negative.
							 | 
						|||
| 
								 | 
							
								# There is no current way to *selectively* filter out these expected error conditions
							 | 
						|||
| 
								 | 
							
								# (see mysql-test/lib/mtr_report.pl, mtr_report_stats()).
							 | 
						|||
| 
								 | 
							
								# Instead of filtering all occurences of "Failed to write to
							 | 
						|||
| 
								 | 
							
								# mysql.general_log", which could hide bugs when the error is not expected,
							 | 
						|||
| 
								 | 
							
								# this test case is commented instead.
							 | 
						|||
| 
								 | 
							
								# TODO: improve filtering of expected errors in master.err in
							 | 
						|||
| 
								 | 
							
								# mysql-test-run.pl (based on the test name ?), and uncomment this test.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# --disable_warnings
							 | 
						|||
| 
								 | 
							
								# drop table if exists mysql.bad_general_log;
							 | 
						|||
| 
								 | 
							
								# drop table if exists mysql.bad_slow_log;
							 | 
						|||
| 
								 | 
							
								# drop table if exists mysql.general_log_hide;
							 | 
						|||
| 
								 | 
							
								# drop table if exists mysql.slow_log_hide;
							 | 
						|||
| 
								 | 
							
								# --enable_warnings
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# create table mysql.bad_general_log (a int) engine= CSV;
							 | 
						|||
| 
								 | 
							
								# create table mysql.bad_slow_log (a int) engine= CSV;
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# # Rename does not perform checks on the table structure,
							 | 
						|||
| 
								 | 
							
								# # exploiting this to force a failure to log
							 | 
						|||
| 
								 | 
							
								# rename table mysql.general_log to mysql.general_log_hide, mysql.bad_general_log TO mysql.general_log;
							 | 
						|||
| 
								 | 
							
								# rename table mysql.slow_log to mysql.slow_log_hide, mysql.bad_slow_log TO mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# # The following message should be printed in master.log:
							 | 
						|||
| 
								 | 
							
								# # [ERROR] Failed to write to mysql.general_log
							 | 
						|||
| 
								 | 
							
								# # TODO: See how verifying this could be automated
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# flush tables;
							 | 
						|||
| 
								 | 
							
								# select "logging this should fail";
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# # Restore the log tables
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# rename table mysql.general_log to mysql.bad_general_log, mysql.general_log_hide TO mysql.general_log;
							 | 
						|||
| 
								 | 
							
								# rename table mysql.slow_log to mysql.bad_slow_log, mysql.slow_log_hide TO mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# flush tables;
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# drop table mysql.bad_general_log;
							 | 
						|||
| 
								 | 
							
								# drop table mysql.bad_slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #21966 Strange warnings on repair of the log tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use mysql;
							 | 
						|||
| 
								 | 
							
								# check that no warning occurs on repair of the log tables
							 | 
						|||
| 
								 | 
							
								repair table general_log;
							 | 
						|||
| 
								 | 
							
								repair table slow_log;
							 | 
						|||
| 
								 | 
							
								# check that no warning occurs on "create like" for the log tables
							 | 
						|||
| 
								 | 
							
								create table general_log_new like general_log;
							 | 
						|||
| 
								 | 
							
								create table slow_log_new like slow_log;
							 | 
						|||
| 
								 | 
							
								show tables like "%log%";
							 | 
						|||
| 
								 | 
							
								drop table slow_log_new, general_log_new;
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#27857 (Log tables supplies the wrong value for generating
							 | 
						|||
| 
								 | 
							
								#            AUTO_INCREMENT numbers)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL LOG_OUTPUT = 'TABLE';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## test the general log
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = 0;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								TRUNCATE TABLE mysql.general_log;
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.general_log ENGINE = MyISAM;
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.general_log
							 | 
						|||
| 
								 | 
							
								  ADD COLUMN seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = 1;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--replace_column 1 EVENT_TIME 2 USER_HOST 3 THREAD_ID 4 SERVER_ID
							 | 
						|||
| 
								 | 
							
								SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 EVENT_TIME 2 USER_HOST 3 THREAD_ID 4 SERVER_ID
							 | 
						|||
| 
								 | 
							
								SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								SELECT "My own query 1";
							 | 
						|||
| 
								 | 
							
								SELECT "My own query 2";
							 | 
						|||
| 
								 | 
							
								--replace_column 1 EVENT_TIME 2 USER_HOST 3 THREAD_ID 4 SERVER_ID
							 | 
						|||
| 
								 | 
							
								SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = 0;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.general_log DROP COLUMN seq;
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.general_log ENGINE = CSV;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## test the slow query log
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = 0;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								TRUNCATE TABLE mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.slow_log ENGINE = MyISAM;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.slow_log
							 | 
						|||
| 
								 | 
							
								  ADD COLUMN seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET SESSION long_query_time = 1;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = 1;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## FLUSH LOGS above might be slow, so the following is
							 | 
						|||
| 
								 | 
							
								## logged as either seq 1-4 or seq 2-5
							 | 
						|||
| 
								 | 
							
								SELECT "My own slow query", sleep(2);
							 | 
						|||
| 
								 | 
							
								SELECT "My own slow query", sleep(2);
							 | 
						|||
| 
								 | 
							
								SELECT "My own slow query", sleep(2);
							 | 
						|||
| 
								 | 
							
								SELECT "My own slow query", sleep(2);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## So we look for seq 2-4
							 | 
						|||
| 
								 | 
							
								--replace_column 1 START_TIME 2 USER_HOST 3 QUERY_TIME
							 | 
						|||
| 
								 | 
							
								SELECT * FROM mysql.slow_log WHERE seq >= 2 LIMIT 3;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = 0;
							 | 
						|||
| 
								 | 
							
								SET SESSION long_query_time =@saved_long_query_time;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.slow_log DROP COLUMN seq;
							 | 
						|||
| 
								 | 
							
								ALTER TABLE mysql.slow_log ENGINE = CSV;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = @old_general_log;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = @old_slow_query_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#25422 (Hang with log tables)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop procedure if exists proc25422_truncate_slow;
							 | 
						|||
| 
								 | 
							
								drop procedure if exists proc25422_truncate_general;
							 | 
						|||
| 
								 | 
							
								drop procedure if exists proc25422_alter_slow;
							 | 
						|||
| 
								 | 
							
								drop procedure if exists proc25422_alter_general;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								delimiter //;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use test//
							 | 
						|||
| 
								 | 
							
								create procedure proc25422_truncate_slow (loops int)
							 | 
						|||
| 
								 | 
							
								begin
							 | 
						|||
| 
								 | 
							
								  declare v1 int default 0;
							 | 
						|||
| 
								 | 
							
								  declare continue handler for sqlexception /* errors from truncate */
							 | 
						|||
| 
								 | 
							
								    begin end;
							 | 
						|||
| 
								 | 
							
								  while v1 < loops do
							 | 
						|||
| 
								 | 
							
								    truncate mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								    set v1 = v1 + 1;
							 | 
						|||
| 
								 | 
							
								    end while;
							 | 
						|||
| 
								 | 
							
								end//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc25422_truncate_general (loops int)
							 | 
						|||
| 
								 | 
							
								begin
							 | 
						|||
| 
								 | 
							
								  declare v1 int default 0;
							 | 
						|||
| 
								 | 
							
								  declare continue handler for sqlexception /* errors from truncate */
							 | 
						|||
| 
								 | 
							
								    begin end;
							 | 
						|||
| 
								 | 
							
								  while v1 < loops do
							 | 
						|||
| 
								 | 
							
								    truncate mysql.general_log;
							 | 
						|||
| 
								 | 
							
								    set v1 = v1 + 1;
							 | 
						|||
| 
								 | 
							
								    end while;
							 | 
						|||
| 
								 | 
							
								end//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc25422_alter_slow (loops int)
							 | 
						|||
| 
								 | 
							
								begin
							 | 
						|||
| 
								 | 
							
								  declare v1 int default 0;
							 | 
						|||
| 
								 | 
							
								  declare ER_BAD_LOG_STATEMENT condition for 1575;
							 | 
						|||
| 
								 | 
							
								  declare continue handler for ER_BAD_LOG_STATEMENT begin end;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  while v1 < loops do
							 | 
						|||
| 
								 | 
							
								    set @old_log_state = @@global.slow_query_log;
							 | 
						|||
| 
								 | 
							
								    set global slow_query_log = 'OFF';
							 | 
						|||
| 
								 | 
							
								    alter table mysql.slow_log engine = CSV;
							 | 
						|||
| 
								 | 
							
								    set global slow_query_log = @old_log_state;
							 | 
						|||
| 
								 | 
							
								    set v1 = v1 + 1;
							 | 
						|||
| 
								 | 
							
								    end while;
							 | 
						|||
| 
								 | 
							
								end//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc25422_alter_general (loops int)
							 | 
						|||
| 
								 | 
							
								begin
							 | 
						|||
| 
								 | 
							
								  declare v1 int default 0;
							 | 
						|||
| 
								 | 
							
								  declare ER_BAD_LOG_STATEMENT condition for 1575;
							 | 
						|||
| 
								 | 
							
								  declare continue handler for ER_BAD_LOG_STATEMENT begin end;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  while v1 < loops do
							 | 
						|||
| 
								 | 
							
								    set @old_log_state = @@global.general_log;
							 | 
						|||
| 
								 | 
							
								    set global general_log = 'OFF';
							 | 
						|||
| 
								 | 
							
								    alter table mysql.general_log engine = CSV;
							 | 
						|||
| 
								 | 
							
								    set global general_log = @old_log_state;
							 | 
						|||
| 
								 | 
							
								    set v1 = v1 + 1;
							 | 
						|||
| 
								 | 
							
								    end while;
							 | 
						|||
| 
								 | 
							
								end//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								delimiter ;//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @iterations=100;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo "Serial test (proc25422_truncate_slow)"
							 | 
						|||
| 
								 | 
							
								call proc25422_truncate_slow(@iterations);
							 | 
						|||
| 
								 | 
							
								--echo "Serial test (proc25422_truncate_general)"
							 | 
						|||
| 
								 | 
							
								call proc25422_truncate_general(@iterations);
							 | 
						|||
| 
								 | 
							
								--echo "Serial test (proc25422_alter_slow)"
							 | 
						|||
| 
								 | 
							
								call proc25422_alter_slow(@iterations);
							 | 
						|||
| 
								 | 
							
								--echo "Serial test (proc25422_alter_general)"
							 | 
						|||
| 
								 | 
							
								call proc25422_alter_general(@iterations);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo "Parallel test"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# ER_BAD_LOG_STATEMENT errors will occur,
							 | 
						|||
| 
								 | 
							
								# since concurrent threads do SET GLOBAL general_log= ...
							 | 
						|||
| 
								 | 
							
								# This is silenced by handlers and will not affect the test
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connect (addconroot1, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot2, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot3, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot4, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot5, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot6, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot7, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								connect (addconroot8, localhost, root,,);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection addconroot1;
							 | 
						|||
| 
								 | 
							
								send call proc25422_truncate_slow(@iterations);
							 | 
						|||
| 
								 | 
							
								connection addconroot2;
							 | 
						|||
| 
								 | 
							
								send call proc25422_truncate_slow(@iterations);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection addconroot3;
							 | 
						|||
| 
								 | 
							
								send call proc25422_truncate_general(@iterations);
							 | 
						|||
| 
								 | 
							
								connection addconroot4;
							 | 
						|||
| 
								 | 
							
								send call proc25422_truncate_general(@iterations);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection addconroot5;
							 | 
						|||
| 
								 | 
							
								send call proc25422_alter_slow(@iterations);
							 | 
						|||
| 
								 | 
							
								connection addconroot6;
							 | 
						|||
| 
								 | 
							
								send call proc25422_alter_slow(@iterations);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection addconroot7;
							 | 
						|||
| 
								 | 
							
								send call proc25422_alter_general(@iterations);
							 | 
						|||
| 
								 | 
							
								connection addconroot8;
							 | 
						|||
| 
								 | 
							
								send call proc25422_alter_general(@iterations);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection addconroot1;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot2;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot3;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot4;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot5;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot6;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot7;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								connection addconroot8;
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection default;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								disconnect addconroot1;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot2;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot3;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot4;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot5;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot6;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot7;
							 | 
						|||
| 
								 | 
							
								disconnect addconroot8;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop procedure proc25422_truncate_slow;
							 | 
						|||
| 
								 | 
							
								drop procedure proc25422_truncate_general;
							 | 
						|||
| 
								 | 
							
								drop procedure proc25422_alter_slow;
							 | 
						|||
| 
								 | 
							
								drop procedure proc25422_alter_general;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--enable_ps_protocol
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#23044 (Warnings on flush of a log table)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								FLUSH TABLE mysql.general_log;
							 | 
						|||
| 
								 | 
							
								show warnings;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								FLUSH TABLE mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								show warnings;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#17876 (Truncating mysql.slow_log in a SP after using cursor locks the
							 | 
						|||
| 
								 | 
							
								#            thread)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS `db_17876.slow_log_data`;
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS `db_17876.general_log_data`;
							 | 
						|||
| 
								 | 
							
								DROP PROCEDURE IF EXISTS `db_17876.archiveSlowLog`;
							 | 
						|||
| 
								 | 
							
								DROP PROCEDURE IF EXISTS `db_17876.archiveGeneralLog`;
							 | 
						|||
| 
								 | 
							
								DROP DATABASE IF EXISTS `db_17876`;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE DATABASE db_17876;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE `db_17876.slow_log_data` (
							 | 
						|||
| 
								 | 
							
								  `start_time` timestamp  default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
							 | 
						|||
| 
								 | 
							
								  `user_host` mediumtext ,
							 | 
						|||
| 
								 | 
							
								  `query_time` time ,
							 | 
						|||
| 
								 | 
							
								  `lock_time` time ,
							 | 
						|||
| 
								 | 
							
								  `rows_sent` int(11) ,
							 | 
						|||
| 
								 | 
							
								  `rows_examined` int(11) ,
							 | 
						|||
| 
								 | 
							
								  `db` varchar(512) default NULL,
							 | 
						|||
| 
								 | 
							
								  `last_insert_id` int(11) default NULL,
							 | 
						|||
| 
								 | 
							
								  `insert_id` int(11) default NULL,
							 | 
						|||
| 
								 | 
							
								  `server_id` int(11) default NULL,
							 | 
						|||
| 
								 | 
							
								  `sql_text` mediumtext 
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE `db_17876.general_log_data` (
							 | 
						|||
| 
								 | 
							
								  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
							 | 
						|||
| 
								 | 
							
								  `user_host` mediumtext,
							 | 
						|||
| 
								 | 
							
								  `thread_id` int(11) DEFAULT NULL,
							 | 
						|||
| 
								 | 
							
								  `server_id` int(11) DEFAULT NULL,
							 | 
						|||
| 
								 | 
							
								  `command_type` varchar(64) DEFAULT NULL,
							 | 
						|||
| 
								 | 
							
								  `argument` mediumtext
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DELIMITER //;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE procedure `db_17876.archiveSlowLog`()
							 | 
						|||
| 
								 | 
							
								BEGIN
							 | 
						|||
| 
								 | 
							
								  DECLARE start_time, query_time, lock_time CHAR(20);
							 | 
						|||
| 
								 | 
							
								  DECLARE user_host MEDIUMTEXT;
							 | 
						|||
| 
								 | 
							
								  DECLARE rows_set, rows_examined, last_insert_id, insert_id, server_id INT;
							 | 
						|||
| 
								 | 
							
								  DECLARE dbname MEDIUMTEXT;
							 | 
						|||
| 
								 | 
							
								  DECLARE sql_text BLOB;
							 | 
						|||
| 
								 | 
							
								  DECLARE done INT DEFAULT 0;
							 | 
						|||
| 
								 | 
							
								  DECLARE ER_SP_FETCH_NO_DATA CONDITION for 1329;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  DECLARE cur1 CURSOR FOR SELECT * FROM mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  OPEN cur1;
							 | 
						|||
| 
								 | 
							
								  
							 | 
						|||
| 
								 | 
							
								  REPEAT
							 | 
						|||
| 
								 | 
							
								    BEGIN
							 | 
						|||
| 
								 | 
							
								      BEGIN
							 | 
						|||
| 
								 | 
							
								        DECLARE CONTINUE HANDLER FOR ER_SP_FETCH_NO_DATA SET done = 1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        FETCH cur1 INTO
							 | 
						|||
| 
								 | 
							
								           start_time, user_host, query_time, lock_time,
							 | 
						|||
| 
								 | 
							
								           rows_set, rows_examined, dbname, last_insert_id,
							 | 
						|||
| 
								 | 
							
								           insert_id, server_id, sql_text;
							 | 
						|||
| 
								 | 
							
								      END;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								      IF NOT done THEN
							 | 
						|||
| 
								 | 
							
								        BEGIN
							 | 
						|||
| 
								 | 
							
								          INSERT INTO
							 | 
						|||
| 
								 | 
							
								            `db_17876.slow_log_data`
							 | 
						|||
| 
								 | 
							
								            VALUES(start_time, user_host, query_time, lock_time, rows_set, rows_examined,
							 | 
						|||
| 
								 | 
							
								                   dbname, last_insert_id,  insert_id, server_id, sql_text);
							 | 
						|||
| 
								 | 
							
								        END;
							 | 
						|||
| 
								 | 
							
								      END IF;
							 | 
						|||
| 
								 | 
							
								    END;
							 | 
						|||
| 
								 | 
							
								  UNTIL done END REPEAT;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  CLOSE cur1;
							 | 
						|||
| 
								 | 
							
								  TRUNCATE mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								END //
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE procedure `db_17876.archiveGeneralLog`()
							 | 
						|||
| 
								 | 
							
								BEGIN
							 | 
						|||
| 
								 | 
							
								  DECLARE event_time CHAR(20);
							 | 
						|||
| 
								 | 
							
								  DECLARE user_host, argument MEDIUMTEXT;
							 | 
						|||
| 
								 | 
							
								  DECLARE thread_id, server_id INT;
							 | 
						|||
| 
								 | 
							
								  DECLARE sql_text BLOB;
							 | 
						|||
| 
								 | 
							
								  DECLARE done INT DEFAULT 0;
							 | 
						|||
| 
								 | 
							
								  DECLARE command_type VARCHAR(64);
							 | 
						|||
| 
								 | 
							
								  DECLARE ER_SP_FETCH_NO_DATA CONDITION for 1329;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  DECLARE cur1 CURSOR FOR SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  OPEN cur1;
							 | 
						|||
| 
								 | 
							
								  
							 | 
						|||
| 
								 | 
							
								  REPEAT
							 | 
						|||
| 
								 | 
							
								    BEGIN
							 | 
						|||
| 
								 | 
							
								      BEGIN
							 | 
						|||
| 
								 | 
							
								        DECLARE CONTINUE HANDLER FOR ER_SP_FETCH_NO_DATA SET done = 1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        FETCH cur1 INTO
							 | 
						|||
| 
								 | 
							
								          event_time, user_host, thread_id, server_id,
							 | 
						|||
| 
								 | 
							
								          command_type, argument;
							 | 
						|||
| 
								 | 
							
								      END;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								      IF NOT done THEN
							 | 
						|||
| 
								 | 
							
								        BEGIN
							 | 
						|||
| 
								 | 
							
								          INSERT INTO
							 | 
						|||
| 
								 | 
							
								            `db_17876.general_log_data`
							 | 
						|||
| 
								 | 
							
								            VALUES(event_time, user_host, thread_id, server_id,
							 | 
						|||
| 
								 | 
							
								            command_type, argument);
							 | 
						|||
| 
								 | 
							
								        END;
							 | 
						|||
| 
								 | 
							
								      END IF;
							 | 
						|||
| 
								 | 
							
								    END;
							 | 
						|||
| 
								 | 
							
								  UNTIL done END REPEAT;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  CLOSE cur1;
							 | 
						|||
| 
								 | 
							
								  TRUNCATE mysql.general_log;
							 | 
						|||
| 
								 | 
							
								END //
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DELIMITER ;//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = ON;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = ON;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								select "put something into general_log";
							 | 
						|||
| 
								 | 
							
								select "... and something more ...";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								call `db_17876.archiveSlowLog`();
							 | 
						|||
| 
								 | 
							
								call `db_17876.archiveGeneralLog`();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = OFF;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = OFF;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								call `db_17876.archiveSlowLog`();
							 | 
						|||
| 
								 | 
							
								call `db_17876.archiveGeneralLog`();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP TABLE `db_17876.slow_log_data`;
							 | 
						|||
| 
								 | 
							
								DROP TABLE `db_17876.general_log_data`;
							 | 
						|||
| 
								 | 
							
								DROP PROCEDURE IF EXISTS `db_17876.archiveSlowLog`;
							 | 
						|||
| 
								 | 
							
								DROP PROCEDURE IF EXISTS `db_17876.archiveGeneralLog`;
							 | 
						|||
| 
								 | 
							
								DROP DATABASE IF EXISTS `db_17876`;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = @old_general_log;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = @old_slow_query_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#21557 entries in the general query log truncated at 1000 characters.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								select CONNECTION_ID() into @thread_id;
							 | 
						|||
| 
								 | 
							
								truncate table mysql.general_log;
							 | 
						|||
| 
								 | 
							
								set global general_log = on;
							 | 
						|||
| 
								 | 
							
								--disable_result_log
							 | 
						|||
| 
								 | 
							
								set @lparam = "000 001 002 003 004 005 006 007 008 009"
							 | 
						|||
| 
								 | 
							
								              "010 011 012 013 014 015 016 017 018 019"
							 | 
						|||
| 
								 | 
							
								              "020 021 022 023 024 025 026 027 028 029"
							 | 
						|||
| 
								 | 
							
								              "030 031 032 033 034 035 036 037 038 039"
							 | 
						|||
| 
								 | 
							
								              "040 041 042 043 044 045 046 047 048 049"
							 | 
						|||
| 
								 | 
							
								              "050 051 052 053 054 055 056 057 058 059"
							 | 
						|||
| 
								 | 
							
								              "060 061 062 063 064 065 066 067 068 069"
							 | 
						|||
| 
								 | 
							
								              "070 071 072 073 074 075 076 077 078 079"
							 | 
						|||
| 
								 | 
							
								              "080 081 082 083 084 085 086 087 088 089"
							 | 
						|||
| 
								 | 
							
								              "090 091 092 093 094 095 096 097 098 099"
							 | 
						|||
| 
								 | 
							
								              "100 101 102 103 104 105 106 107 108 109"
							 | 
						|||
| 
								 | 
							
								              "110 111 112 113 114 115 116 117 118 119"
							 | 
						|||
| 
								 | 
							
								              "120 121 122 123 124 125 126 127 128 129"
							 | 
						|||
| 
								 | 
							
								              "130 131 132 133 134 135 136 137 138 139"
							 | 
						|||
| 
								 | 
							
								              "140 141 142 143 144 145 146 147 148 149"
							 | 
						|||
| 
								 | 
							
								              "150 151 152 153 154 155 156 157 158 159"
							 | 
						|||
| 
								 | 
							
								              "160 161 162 163 164 165 166 167 168 169"
							 | 
						|||
| 
								 | 
							
								              "170 171 172 173 174 175 176 177 178 179"
							 | 
						|||
| 
								 | 
							
								              "180 181 182 183 184 185 186 187 188 189"
							 | 
						|||
| 
								 | 
							
								              "190 191 192 193 194 195 196 197 198 199"
							 | 
						|||
| 
								 | 
							
								              "200 201 202 203 204 205 206 207 208 209"
							 | 
						|||
| 
								 | 
							
								              "210 211 212 213 214 215 216 217 218 219"
							 | 
						|||
| 
								 | 
							
								              "220 221 222 223 224 225 226 227 228 229"
							 | 
						|||
| 
								 | 
							
								              "230 231 232 233 234 235 236 237 238 239"
							 | 
						|||
| 
								 | 
							
								              "240 241 242 243 244 245 246 247 248 249"
							 | 
						|||
| 
								 | 
							
								              "250 251 252 253 254 255 256 257 258 259"
							 | 
						|||
| 
								 | 
							
								              "260 261 262 263 264 265 266 267 268 269"
							 | 
						|||
| 
								 | 
							
								              "270 271 272 273 274 275 276 277 278 279"
							 | 
						|||
| 
								 | 
							
								              "280 281 282 283 284 285 286 287 288 289"
							 | 
						|||
| 
								 | 
							
								              "290 291 292 293 294 295 296 297 298 299"
							 | 
						|||
| 
								 | 
							
								              "300 301 302 303 304 305 306 307 308 309"
							 | 
						|||
| 
								 | 
							
								              "310 311 312 313 314 315 316 317 318 319"
							 | 
						|||
| 
								 | 
							
								              "320 321 322 323 324 325 326 327 328 329"
							 | 
						|||
| 
								 | 
							
								              "330 331 332 333 334 335 336 337 338 339"
							 | 
						|||
| 
								 | 
							
								              "340 341 342 343 344 345 346 347 348 349"
							 | 
						|||
| 
								 | 
							
								              "350 351 352 353 354 355 356 357 358 359"
							 | 
						|||
| 
								 | 
							
								              "360 361 362 363 364 365 366 367 368 369"
							 | 
						|||
| 
								 | 
							
								              "370 371 372 373 374 375 376 377 378 379"
							 | 
						|||
| 
								 | 
							
								              "380 381 382 383 384 385 386 387 388 389"
							 | 
						|||
| 
								 | 
							
								              "390 391 392 393 394 395 396 397 398 399"
							 | 
						|||
| 
								 | 
							
								              "400 401 402 403 404 405 406 407 408 409"
							 | 
						|||
| 
								 | 
							
								              "410 411 412 413 414 415 416 417 418 419"
							 | 
						|||
| 
								 | 
							
								              "420 421 422 423 424 425 426 427 428 429"
							 | 
						|||
| 
								 | 
							
								              "430 431 432 433 434 435 436 437 438 439"
							 | 
						|||
| 
								 | 
							
								              "440 441 442 443 444 445 446 447 448 449"
							 | 
						|||
| 
								 | 
							
								              "450 451 452 453 454 455 456 457 458 459"
							 | 
						|||
| 
								 | 
							
								              "460 461 462 463 464 465 466 467 468 469"
							 | 
						|||
| 
								 | 
							
								              "470 471 472 473 474 475 476 477 478 479"
							 | 
						|||
| 
								 | 
							
								              "480 481 482 483 484 485 486 487 488 489"
							 | 
						|||
| 
								 | 
							
								              "490 491 492 493 494 495 496 497 498 499"
							 | 
						|||
| 
								 | 
							
								              "500 501 502 503 504 505 506 507 508 509"
							 | 
						|||
| 
								 | 
							
								              "510 511 512 513 514 515 516 517 518 519"
							 | 
						|||
| 
								 | 
							
								              "520 521 522 523 524 525 526 527 528 529"
							 | 
						|||
| 
								 | 
							
								              "530 531 532 533 534 535 536 537 538 539"
							 | 
						|||
| 
								 | 
							
								              "540 541 542 543 544 545 546 547 548 549"
							 | 
						|||
| 
								 | 
							
								              "550 551 552 553 554 555 556 557 558 559"
							 | 
						|||
| 
								 | 
							
								              "560 561 562 563 564 565 566 567 568 569"
							 | 
						|||
| 
								 | 
							
								              "570 571 572 573 574 575 576 577 578 579"
							 | 
						|||
| 
								 | 
							
								              "580 581 582 583 584 585 586 587 588 589"
							 | 
						|||
| 
								 | 
							
								              "590 591 592 593 594 595 596 597 598 599"
							 | 
						|||
| 
								 | 
							
								              "600 601 602 603 604 605 606 607 608 609"
							 | 
						|||
| 
								 | 
							
								              "610 611 612 613 614 615 616 617 618 619"
							 | 
						|||
| 
								 | 
							
								              "620 621 622 623 624 625 626 627 628 629"
							 | 
						|||
| 
								 | 
							
								              "630 631 632 633 634 635 636 637 638 639"
							 | 
						|||
| 
								 | 
							
								              "640 641 642 643 644 645 646 647 648 649"
							 | 
						|||
| 
								 | 
							
								              "650 651 652 653 654 655 656 657 658 659"
							 | 
						|||
| 
								 | 
							
								              "660 661 662 663 664 665 666 667 668 669"
							 | 
						|||
| 
								 | 
							
								              "670 671 672 673 674 675 676 677 678 679"
							 | 
						|||
| 
								 | 
							
								              "680 681 682 683 684 685 686 687 688 689"
							 | 
						|||
| 
								 | 
							
								              "690 691 692 693 694 695 696 697 698 699"
							 | 
						|||
| 
								 | 
							
								              "700 701 702 703 704 705 706 707 708 709"
							 | 
						|||
| 
								 | 
							
								              "710 711 712 713 714 715 716 717 718 719"
							 | 
						|||
| 
								 | 
							
								              "720 721 722 723 724 725 726 727 728 729"
							 | 
						|||
| 
								 | 
							
								              "730 731 732 733 734 735 736 737 738 739"
							 | 
						|||
| 
								 | 
							
								              "740 741 742 743 744 745 746 747 748 749"
							 | 
						|||
| 
								 | 
							
								              "750 751 752 753 754 755 756 757 758 759"
							 | 
						|||
| 
								 | 
							
								              "760 761 762 763 764 765 766 767 768 769"
							 | 
						|||
| 
								 | 
							
								              "770 771 772 773 774 775 776 777 778 779"
							 | 
						|||
| 
								 | 
							
								              "780 781 782 783 784 785 786 787 788 789"
							 | 
						|||
| 
								 | 
							
								              "790 791 792 793 794 795 796 797 798 799"
							 | 
						|||
| 
								 | 
							
								              "800 801 802 803 804 805 806 807 808 809"
							 | 
						|||
| 
								 | 
							
								              "810 811 812 813 814 815 816 817 818 819"
							 | 
						|||
| 
								 | 
							
								              "820 821 822 823 824 825 826 827 828 829"
							 | 
						|||
| 
								 | 
							
								              "830 831 832 833 834 835 836 837 838 839"
							 | 
						|||
| 
								 | 
							
								              "840 841 842 843 844 845 846 847 848 849"
							 | 
						|||
| 
								 | 
							
								              "850 851 852 853 854 855 856 857 858 859"
							 | 
						|||
| 
								 | 
							
								              "860 861 862 863 864 865 866 867 868 869"
							 | 
						|||
| 
								 | 
							
								              "870 871 872 873 874 875 876 877 878 879"
							 | 
						|||
| 
								 | 
							
								              "880 881 882 883 884 885 886 887 888 889"
							 | 
						|||
| 
								 | 
							
								              "890 891 892 893 894 895 896 897 898 899"
							 | 
						|||
| 
								 | 
							
								              "900 901 902 903 904 905 906 907 908 909"
							 | 
						|||
| 
								 | 
							
								              "910 911 912 913 914 915 916 917 918 919"
							 | 
						|||
| 
								 | 
							
								              "920 921 922 923 924 925 926 927 928 929"
							 | 
						|||
| 
								 | 
							
								              "930 931 932 933 934 935 936 937 938 939"
							 | 
						|||
| 
								 | 
							
								              "940 941 942 943 944 945 946 947 948 949"
							 | 
						|||
| 
								 | 
							
								              "950 951 952 953 954 955 956 957 958 959"
							 | 
						|||
| 
								 | 
							
								              "960 961 962 963 964 965 966 967 968 969"
							 | 
						|||
| 
								 | 
							
								              "970 971 972 973 974 975 976 977 978 979"
							 | 
						|||
| 
								 | 
							
								              "980 981 982 983 984 985 986 987 988 989"
							 | 
						|||
| 
								 | 
							
								              "990 991 992 993 994 995 996 997 998 999";
							 | 
						|||
| 
								 | 
							
								--enable_result_log
							 | 
						|||
| 
								 | 
							
								prepare long_query from "select ? as long_query";
							 | 
						|||
| 
								 | 
							
								--disable_result_log
							 | 
						|||
| 
								 | 
							
								execute long_query using @lparam;
							 | 
						|||
| 
								 | 
							
								--enable_result_log
							 | 
						|||
| 
								 | 
							
								set global general_log = off;
							 | 
						|||
| 
								 | 
							
								select command_type, argument from mysql.general_log where thread_id = @thread_id;
							 | 
						|||
| 
								 | 
							
								deallocate prepare long_query;
							 | 
						|||
| 
								 | 
							
								set global general_log = @old_general_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#34306: Can't make copy of log tables when server binary log is enabled
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS log_count;
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS slow_log_copy;
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS general_log_copy;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE log_count (count BIGINT(21));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = ON;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = ON;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE slow_log_copy SELECT * FROM mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO slow_log_copy SELECT * FROM mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.slow_log));
							 | 
						|||
| 
								 | 
							
								DROP TABLE slow_log_copy;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE general_log_copy SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO general_log_copy SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.general_log));
							 | 
						|||
| 
								 | 
							
								DROP TABLE general_log_copy;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = OFF;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = OFF;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE slow_log_copy SELECT * FROM mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO slow_log_copy SELECT * FROM mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.slow_log));
							 | 
						|||
| 
								 | 
							
								DROP TABLE slow_log_copy;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE general_log_copy SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO general_log_copy SELECT * FROM mysql.general_log;
							 | 
						|||
| 
								 | 
							
								INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.general_log));
							 | 
						|||
| 
								 | 
							
								DROP TABLE general_log_copy;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET GLOBAL general_log = @saved_general_log;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = @saved_slow_query_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP TABLE log_count;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #31700: thd->examined_row_count not incremented for 'const' type queries
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET SESSION long_query_time = 0;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL slow_query_log = ON;
							 | 
						|||
| 
								 | 
							
								FLUSH LOGS;
							 | 
						|||
| 
								 | 
							
								TRUNCATE TABLE mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Let there be three columns, unique, non-unique, and non-indexed:
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (f1 SERIAL,f2 INT, f3 INT, PRIMARY KEY(f1), KEY(f2));
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1,1,1);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (2,2,2);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (3,3,3);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (4,4,4);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SELECT SQL_NO_CACHE 'Bug#31700 - SCAN',f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f3=4;
							 | 
						|||
| 
								 | 
							
								SELECT SQL_NO_CACHE 'Bug#31700 - KEY', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f2=3;
							 | 
						|||
| 
								 | 
							
								SELECT SQL_NO_CACHE 'Bug#31700 - PK',  f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--replace_column 1 TIMESTAMP
							 | 
						|||
| 
								 | 
							
								SELECT start_time, rows_examined, rows_sent, sql_text FROM mysql.slow_log WHERE sql_text LIKE '%Bug#31700%' ORDER BY start_time;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								TRUNCATE TABLE mysql.slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #47924 main.log_tables times out sporadically
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use mysql;
							 | 
						|||
| 
								 | 
							
								# Should result in error
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists renamed_general_log;
							 | 
						|||
| 
								 | 
							
								drop table if exists renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_RENAME_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								RENAME TABLE general_log TO renamed_general_log;
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_RENAME_LOG_TABLE
							 | 
						|||
| 
								 | 
							
								RENAME TABLE slow_log TO renamed_slow_log;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								flush tables with read lock;
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET @@session.long_query_time= @old_long_query_time;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET @@global.log_output=       @old_log_output;
							 | 
						|||
| 
								 | 
							
								SET @@global.slow_query_log=   @old_slow_query_log;
							 | 
						|||
| 
								 | 
							
								SET @@global.general_log=      @old_general_log;
							 |