------------------------------------------------------------ revno: 3812 committer: Sergey Vojtovich branch nick: 10.0-mdev4950 timestamp: Fri 2013-09-13 12:44:51 +0400 message: MDEV-4950 - mysql_upgrade fails with disabled InnoDB Do not attempt to create innodb_index_stats and innodb_table_stats if InnoDB is not available. === added file 'mysql-test/r/mysql_upgrade_no_innodb.result' --- mysql-test/r/mysql_upgrade_no_innodb.result 1970-01-01 00:00:00 +0000 +++ mysql-test/r/mysql_upgrade_no_innodb.result 2013-09-13 08:44:51 +0000 @@ -0,0 +1,3 @@ +The --upgrade-system-tables option was used, databases won't be touched. +Phase 3/3: Running 'mysql_fix_privilege_tables'... +OK === added file 'mysql-test/t/mysql_upgrade_no_innodb.test' --- mysql-test/t/mysql_upgrade_no_innodb.test 1970-01-01 00:00:00 +0000 +++ mysql-test/t/mysql_upgrade_no_innodb.test 2013-09-13 08:44:51 +0000 @@ -0,0 +1,6 @@ +--source include/mysql_upgrade_preparation.inc + +--exec $MYSQL_UPGRADE --force --upgrade-system-tables 2>&1 + +let $MYSQLD_DATADIR= `select @@datadir`; +--remove_file $MYSQLD_DATADIR/mysql_upgrade_info === modified file 'scripts/mysql_system_tables.sql' --- scripts/mysql_system_tables.sql 2013-08-13 11:35:36 +0000 +++ scripts/mysql_system_tables.sql 2013-09-13 08:44:51 +0000 @@ -104,10 +104,7 @@ DROP PREPARE stmt; CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','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') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events'; -SET @sql_mode_orig=@@SESSION.sql_mode; -SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION'; - -CREATE TABLE IF NOT EXISTS innodb_table_stats ( +SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats ( database_name VARCHAR(64) NOT NULL, table_name VARCHAR(64) NOT NULL, last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, @@ -115,9 +112,9 @@ CREATE TABLE IF NOT EXISTS innodb_table_ clustered_index_size BIGINT UNSIGNED NOT NULL, sum_of_other_index_sizes BIGINT UNSIGNED NOT NULL, PRIMARY KEY (database_name, table_name) -) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0; +) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"; -CREATE TABLE IF NOT EXISTS innodb_index_stats ( +SET @create_innodb_index_stats="CREATE TABLE IF NOT EXISTS innodb_index_stats ( database_name VARCHAR(64) NOT NULL, table_name VARCHAR(64) NOT NULL, index_name VARCHAR(64) NOT NULL, @@ -131,11 +128,19 @@ CREATE TABLE IF NOT EXISTS innodb_index_ sample_size BIGINT UNSIGNED, stat_description VARCHAR(1024) NOT NULL, PRIMARY KEY (database_name, table_name, index_name, stat_name) -) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0; +) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"; -SET SESSION sql_mode=@sql_mode_orig; +set @have_innodb= (select count(engine) from information_schema.engines where engine='INNODB' and support != 'NO'); -SET @have_innodb = (SELECT support FROM information_schema.engines WHERE engine = 'InnoDB'); +SET @str=IF(@have_innodb <> 0, @create_innodb_table_stats, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @str=IF(@have_innodb <> 0, @create_innodb_index_stats, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; SET @cmd="CREATE TABLE IF NOT EXISTS slave_relay_log_info ( Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',