[MDEV-5282] installation using mysql_install_db fails, but it shouldn't Created: 2013-11-12  Updated: 2013-11-13  Resolved: 2013-11-13

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.0.5
Fix Version/s: 10.0.6

Type: Bug Priority: Blocker
Reporter: Giuseppe Maxia Assignee: Kristian Nielsen
Resolution: Fixed Votes: 0
Labels: gtid, installer, sandbox
Environment:

installation using MySQL Sandbox, which in turn uses mysql_install_db



 Description   

While installing MariaDB 10.0.5 (compiled from source on MacOSX) using MySQL Sandbox, I got this error:

$HOME/opt/mysql/ma10.0.5/scripts/mysql_install_db --no-defaults --user=$USER --basedir=$HOME/opt/mysql/ma10.0.5 --datadir=$HOME/sandboxes/msb_ma10_0_5/data --tmpdir=$HOME/sandboxes/msb_ma10_0_5/tmp --lower_case_table_names=2
error while creating grant tables
Installing MariaDB/MySQL system tables in '$HOME/sandboxes/msb_ma10_0_5/data' ...

      1. ( ... many [Note] lines removed for clarity)
        2013-11-12 05:58:58 12461e000 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.

However, the table is in the data directory, and the database server starts fine.

This bug prevents MySQL Sandbox from using MariaDB



 Comments   
Comment by Elena Stepanova [ 2013-11-12 ]

It happens because gtid_slave_pos table is created at the very beginning of mysql_system_tables.sql, before InnoDB stats tables. I suggest moving it to the end of the script (it can also be as a workaround until it's released), something like

=== modified file 'scripts/mysql_system_tables.sql'
— scripts/mysql_system_tables.sql 2013-11-04 07:43:56 +0000
+++ scripts/mysql_system_tables.sql 2013-11-12 08:42:35 +0000
@@ -21,11 +21,7 @@

set sql_mode='';

— We want this to be created with the default storage engine.
— This way, if InnoDB is used we get crash safety, and if MyISAM is used
— we avoid mixed-engine transactions.
-CREATE TABLE IF NOT EXISTS gtid_slave_pos (domain_id INT UNSIGNED NOT NULL, sub_id BIGINT UNSIGNED NOT NULL, server_id INT UNSIGNED NOT NULL, seq_no BIGINT UNSIGNED NOT NULL, PRIMARY KEY (domain_id, sub_id)) comment='Replication slave GTID position';
-
+set @storage_engine.saved = @@storage_engine;
set storage_engine=myisam;

CREATE TABLE IF NOT EXISTS db ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(80) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db,User), KEY User (User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges';
@@ -227,3 +223,12 @@
CREATE TABLE IF NOT EXISTS column_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, column_name varchar(64) NOT NULL, min_value varchar(255) DEFAULT NULL, max_value varchar(255) DEFAULT NULL, nulls_ratio decimal(12,4) DEFAULT NULL, avg_length decimal(12,4) DEFAULT NULL, avg_frequency decimal(12,4) DEFAULT NULL, hist_size tinyint unsigned, hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB'), histogram varbinary(255), PRIMARY KEY (db_name,table_name,column_name) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Columns';

CREATE TABLE IF NOT EXISTS index_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, index_name varchar(64) NOT NULL, prefix_arity int(11) unsigned NOT NULL, avg_frequency decimal(12,4) DEFAULT NULL, PRIMARY KEY (db_name,table_name,index_name,prefix_arity) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Indexes';
+
+-- We want this to be created with the default storage engine.
+-- This way, if InnoDB is used we get crash safety, and if MyISAM is used
+-- we avoid mixed-engine transactions.
+set storage_engine = @storage_engine.saved;
+
+CREATE TABLE IF NOT EXISTS gtid_slave_pos (domain_id INT UNSIGNED NOT NULL, sub_id BIGINT UNSIGNED NOT NULL, server_id INT UNSIGNED NOT NULL, seq_no BIGINT UNSIGNED NOT NULL, PRIMARY KEY (domain_id, sub_id)) comment='Replication slave GTID position';
+

Comment by Giuseppe Maxia [ 2013-11-12 ]

With the workaround suggested by Elena, installation works as expected.
I suggest adding a test for mysql_install_db to the test suite, to avoid future breakages.

Comment by Kristian Nielsen [ 2013-11-13 ]

Pushed to 10.0

Generated at Thu Feb 08 07:03:04 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.