Bug #68438 mysql_install_db exits with "Unknown/unsupported storage engine: InnoDB"
Submitted: 20 Feb 2013 2:19 Modified: 19 Jun 2013 18:22
Reporter: Rene Berber Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Installing Severity:S3 (Non-critical)
Version:5.6.10 OS:Linux
Assigned to: CPU Architecture:Any

[20 Feb 2013 2:19] Rene Berber
Description:
After building from source MySQL on an ARM based NAS with the small feature set (which I assume results in no InnoDB engine), I tried to follow with the installation, and at the system tables creation step I got:

mysql # scripts/mysql_install_db --user=mysql
Installing MySQL system tables...2013-02-19 19:02:44 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Pl
ease use --explicit_defaults_for_timestamp server option (see documentation for more details).
2013-02-19 19:02:44 3272 [ERROR] Unknown/unsupported storage engine: InnoDB
2013-02-19 19:02:44 3272 [ERROR] Aborting

2013-02-19 19:02:44 3272 [Note] Binlog end
2013-02-19 19:02:44 3272 [Note] ./bin/mysqld: Shutdown complete

I also tried using: 

scripts/mysql_install_db --user=mysql --default-storage-engine=myisam

with the exact same result (InnoDB is still used, not MyIsam).

There are no logs left, or configuration files (i.e. my.cfg)

Perl version 5.8.8
Gcc version 4.5.4
Linux kernel version 2.6.12

How to repeat:
The relevant steps are:

1. Build

cmake ../mysql-5.6.10/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/mysql -DENABLED_PROFILING=0 -DFEATURE_SET=small -DWITH_EXTRA_CHARSETS=none -DWITH_SSL=system -DWITH_UNIT_TESTS=0 -DWITH_ZLIB=system -DMYSQL_DATADIR=/opt/mysql/data -DSYSCONFDIR=/opt/mysql/etc

make

make install

2. Initial configuration (which fails)

cd /opt/mysql

chown -R mysql:mysql .

scripts/mysql_install_db --user=mysql
[20 Feb 2013 8:18] Shane Bester
Had you set --default-tmp-storage-engine to myisam too?
http://dev.mysql.com/doc/refman/5.6/en/innodb-turning-off.html
[20 Feb 2013 8:19] Shane Bester
and i'm guessing you'd want to make sure sql_mode does not have no_engine_substitution..
[20 Feb 2013 18:58] Rene Berber
> Had you set --default-tmp-storage-engine to myisam too?

Same result:

mysql # scripts/mysql_install_db --user=mysql --default-storage-engine=myisam --default-tmp-storage-engine=myisam
Installing MySQL system tables...2013-02-20 12:51:25 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2013-02-20 12:51:25 20727 [Note] RSA private key file not found: /opt/mysql/data/private_key.pem. Some authentication plugins will not work.
ERROR: 1286  Unknown storage engine 'INNODB'
2013-02-20 12:51:26 20727 [ERROR] Aborting

2013-02-20 12:51:26 20727 [Note] Binlog end
2013-02-20 12:51:26 20727 [Note] ./bin/mysqld: Shutdown complete

> and i'm guessing you'd want to make sure sql_mode does not have
no_engine_substitution.

I don't understand what you mean.

To be clear, this bug report is about lack of information in the documentation, and the failure of the script to adapt to the configured options.

I chose feature set "small" because I'm installing on a NAS with low resources (mainly RAM), but I could not find any description about what "small", or "xsmall", or any of the other options mean.

Granted the main problem is the script, it shouldn't use InnoDB if its not available.
[20 Feb 2013 19:14] Rene Berber
Addition to my last comment:

I don't know why InnoDB is not available, as I said in the description I assume that choosing feature set "small" does produce a DBMS w/o InnoDB.

Under lib/plugin/ I don't see anything that looks like a DB engine, just authentication libraries, perhaps something gets linked statically.

I really don't care which DB engine is used, as long as it works.

Following the article about "Turning Off InnoDB" I also tried adding --innodb=OFF and --skip-innodb.

The first results in a "[ERROR] ./bin/mysqld: unknown variable 'innodb=OFF'";
the second: "[ERROR] ./bin/mysqld: unknown option '--skip-innodb'"
[20 Feb 2013 19:14] Shane Bester
The problem is in mysql_system_tables.sql, when creating innodb_index_stats and innodb_table_stats tables, they must be in innodb.
So it does this first which causes the failure.

SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION';
[20 Feb 2013 19:16] Shane Bester
The solution should be for the script to bypass creating those tables if innodb is not compiled in, or is disabled.
[20 Feb 2013 20:43] Rene Berber
I can confirm, with mysql_system_tables.sql lines 101 to 129 disabled, the configuration succeeds (but still needs the "--default-storage-engine=myisam --default-tmp-storage-engine=myisam" parameters).

Same for starting the DBMS, the parameters are needed.
[21 Feb 2013 5:27] Shane Bester
On a side note, why are you using 5.6.10 without innodb?  Much of the benefits are lost...  For size and simplicity it might be easier to deploy 5.5 or 5.1 since there is no dependency on innodb :)
[21 Feb 2013 16:57] Rene Berber
As I explained in the description, and can be seen in the way I build it, and in one of my other comments: I didn't choose to use, or not use, InnoDB.

It seems to be a MySQL "feature" that when you chose "-DFEATURE_SET=small" you end up with no InnoDB, and the installation procedure gets you to the problem reported (and others later on).

As I also said, the 2nd problem is the lack of good documentation (for that feature set).
[19 Jun 2013 18:22] Paul Dubois
Noted in 5.6.13, 5.7.2 changelogs.

mysql_install_db incorrectly tried to create the
mysql.innodb_table_stats and mysql.innodb_index_stats tables if
InnoDB was not available.
[27 Dec 2013 20:08] Lutchy Horace
Is there a fix or workaround to this issue? Issue still exists with MySQL version 5.6.12?