mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id
The problem is that creating a event could fail if the value of the variable server_id didn't fit in the originator column of the event system table. The cause is two-fold: it was possible to set server_id to a value outside the documented range (from 0 to 2^32-1) and the originator column of the event table didn't have enough room for values in this range. The log tables (general_log and slow_log) also don't have a proper column type to store the server_id and having a large server_id value could prevent queries from being logged. The solution is to ensure that all system tables that store the server_id value have a proper column type (int unsigned) and that the variable can't be set to a value that is not within the range.
This commit is contained in:
@ -736,6 +736,17 @@ select replace(@full_mode, 'ALLOW_INVALID_DATES', 'INVALID_DATES') into @full_mo
|
||||
select name from mysql.event where name = 'p' and sql_mode = @full_mode;
|
||||
name
|
||||
drop event e1;
|
||||
SET @old_server_id = @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = (1 << 32) - 1;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
@@GLOBAL.server_id
|
||||
4294967295
|
||||
CREATE EVENT ev1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
|
||||
SELECT event_name, originator FROM INFORMATION_SCHEMA.EVENTS;
|
||||
event_name originator
|
||||
ev1 4294967295
|
||||
DROP EVENT ev1;
|
||||
SET GLOBAL server_id = @old_server_id;
|
||||
DROP DATABASE events_test;
|
||||
SET GLOBAL event_scheduler= 'ON';
|
||||
SET @@global.concurrent_insert= @concurrent_insert;
|
||||
|
@ -56,7 +56,7 @@ general_log 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(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'
|
||||
@ -65,7 +65,7 @@ Field Type Null Key Default Extra
|
||||
event_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
|
||||
user_host mediumtext NO NULL
|
||||
thread_id int(11) NO NULL
|
||||
server_id int(11) NO NULL
|
||||
server_id int(10) unsigned NO NULL
|
||||
command_type varchar(64) NO NULL
|
||||
argument mediumtext NO NULL
|
||||
show create table mysql.slow_log;
|
||||
@ -80,7 +80,7 @@ slow_log CREATE TABLE `slow_log` (
|
||||
`db` varchar(512) NOT NULL,
|
||||
`last_insert_id` int(11) NOT NULL,
|
||||
`insert_id` int(11) NOT NULL,
|
||||
`server_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'
|
||||
show fields from mysql.slow_log;
|
||||
@ -94,7 +94,7 @@ rows_examined int(11) NO NULL
|
||||
db varchar(512) NO NULL
|
||||
last_insert_id int(11) NO NULL
|
||||
insert_id int(11) NO NULL
|
||||
server_id int(11) NO NULL
|
||||
server_id int(10) unsigned NO NULL
|
||||
sql_text mediumtext NO NULL
|
||||
flush logs;
|
||||
flush tables;
|
||||
@ -167,7 +167,7 @@ general_log 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(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'
|
||||
@ -183,7 +183,7 @@ slow_log CREATE TABLE `slow_log` (
|
||||
`db` varchar(512) NOT NULL,
|
||||
`last_insert_id` int(11) NOT NULL,
|
||||
`insert_id` int(11) NOT NULL,
|
||||
`server_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'
|
||||
alter table mysql.general_log engine=myisam;
|
||||
@ -194,7 +194,7 @@ general_log 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(11) NOT NULL,
|
||||
`server_id` int(10) unsigned NOT NULL,
|
||||
`command_type` varchar(64) NOT NULL,
|
||||
`argument` mediumtext NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
|
||||
@ -210,7 +210,7 @@ slow_log CREATE TABLE `slow_log` (
|
||||
`db` varchar(512) NOT NULL,
|
||||
`last_insert_id` int(11) NOT NULL,
|
||||
`insert_id` int(11) NOT NULL,
|
||||
`server_id` int(11) NOT NULL,
|
||||
`server_id` int(10) unsigned NOT NULL,
|
||||
`sql_text` mediumtext NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log'
|
||||
set global general_log='ON';
|
||||
@ -268,7 +268,7 @@ CREATE TABLE `general_log` (
|
||||
ON UPDATE CURRENT_TIMESTAMP,
|
||||
`user_host` mediumtext NOT NULL,
|
||||
`thread_id` int(11) NOT NULL,
|
||||
`server_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';
|
||||
@ -283,7 +283,7 @@ ON UPDATE CURRENT_TIMESTAMP,
|
||||
`db` varchar(512) NOT NULL,
|
||||
`last_insert_id` int(11) NOT NULL,
|
||||
`insert_id` int(11) NOT NULL,
|
||||
`server_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';
|
||||
|
@ -227,7 +227,7 @@ event CREATE TABLE `event` (
|
||||
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
|
||||
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
|
||||
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||
`originator` int(10) NOT NULL,
|
||||
`originator` int(10) unsigned NOT NULL,
|
||||
`time_zone` char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM',
|
||||
`character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||
`collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||
@ -241,7 +241,7 @@ general_log 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(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'
|
||||
@ -257,7 +257,7 @@ slow_log CREATE TABLE `slow_log` (
|
||||
`db` varchar(512) NOT NULL,
|
||||
`last_insert_id` int(11) NOT NULL,
|
||||
`insert_id` int(11) NOT NULL,
|
||||
`server_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'
|
||||
show tables;
|
||||
|
@ -1426,4 +1426,32 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is
|
||||
def @@storage_engine 253 6 6 N 1 31 8
|
||||
@@storage_engine
|
||||
MyISAM
|
||||
SET @old_server_id = @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = (1 << 32) - 1;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
@@GLOBAL.server_id
|
||||
4294967295
|
||||
SET GLOBAL server_id = (1 << 32);
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect server-id value: '4294967296'
|
||||
SELECT @@GLOBAL.server_id;
|
||||
@@GLOBAL.server_id
|
||||
4294967295
|
||||
SET GLOBAL server_id = (1 << 60);
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect server-id value: '1152921504606846976'
|
||||
SELECT @@GLOBAL.server_id;
|
||||
@@GLOBAL.server_id
|
||||
4294967295
|
||||
SET GLOBAL server_id = 0;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
@@GLOBAL.server_id
|
||||
0
|
||||
SET GLOBAL server_id = -1;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect server_id value: '-1'
|
||||
SELECT @@GLOBAL.server_id;
|
||||
@@GLOBAL.server_id
|
||||
0
|
||||
SET GLOBAL server_id = @old_server_id;
|
||||
End of 5.1 tests
|
||||
|
@ -60,9 +60,11 @@ SELECT @@global.server_id;
|
||||
@@global.server_id
|
||||
0
|
||||
SET @@global.server_id = 2147483649*2;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect server-id value: '4294967298'
|
||||
SELECT @@global.server_id;
|
||||
@@global.server_id
|
||||
4294967298
|
||||
4294967295
|
||||
SET @@global.server_id = 65530.34.;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1
|
||||
SET @@global.server_id = '125';
|
||||
|
@ -1209,6 +1209,18 @@ select replace(@full_mode, 'ALLOW_INVALID_DATES', 'INVALID_DATES') into @full_mo
|
||||
select name from mysql.event where name = 'p' and sql_mode = @full_mode;
|
||||
drop event e1;
|
||||
|
||||
#
|
||||
# Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id
|
||||
#
|
||||
|
||||
SET @old_server_id = @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = (1 << 32) - 1;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
CREATE EVENT ev1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
|
||||
SELECT event_name, originator FROM INFORMATION_SCHEMA.EVENTS;
|
||||
DROP EVENT ev1;
|
||||
SET GLOBAL server_id = @old_server_id;
|
||||
|
||||
###########################################################################
|
||||
#
|
||||
# End of tests
|
||||
|
@ -287,7 +287,7 @@ CREATE TABLE `general_log` (
|
||||
ON UPDATE CURRENT_TIMESTAMP,
|
||||
`user_host` mediumtext NOT NULL,
|
||||
`thread_id` int(11) NOT NULL,
|
||||
`server_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';
|
||||
@ -303,7 +303,7 @@ CREATE TABLE `slow_log` (
|
||||
`db` varchar(512) NOT NULL,
|
||||
`last_insert_id` int(11) NOT NULL,
|
||||
`insert_id` int(11) NOT NULL,
|
||||
`server_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';
|
||||
|
||||
|
@ -1164,5 +1164,21 @@ SET GLOBAL expire_logs_days = @old_eld;
|
||||
select @@storage_engine;
|
||||
--disable_metadata
|
||||
|
||||
#
|
||||
# Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id
|
||||
#
|
||||
|
||||
SET @old_server_id = @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = (1 << 32) - 1;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = (1 << 32);
|
||||
SELECT @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = (1 << 60);
|
||||
SELECT @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = 0;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = -1;
|
||||
SELECT @@GLOBAL.server_id;
|
||||
SET GLOBAL server_id = @old_server_id;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
Reference in New Issue
Block a user