WL#7976: Deprecate skip-innodb in 5.6, remove in 5.7
Affects: Server-5.7 — Status: Complete — Priority: Medium
The system tables are being moved from MyISAM to InnoDB, thus in 5.7 it will be not possible to run the MySQL server without InnoDB (which is the default SE since 5.5). Thus the server options which turn off InnoDB should be deprecated in 5.6 and removed in 5.7. The options are: --skip-innodb --loose-skip-innodb --innodb=OFF --loose-innodb The Cluster team has been consulted, and are OK with this change. For reference, see http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html User Documentation ================== http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-21.html http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_innodb http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#option_mysqld_innodb
NOTE: all three options are referred as 'skip-innodb option' below. Server changes ============== Deprecation changes ------------------- ServerPT decision is to: - deprecate in 5.6; - ignore in 5.7, issue a warning when skip-innodb is used; - completely remove in 5.8 (fail to start). https://mediawiki.us.oracle.com/mysql/index.php/ServerPT#Wednesday.2C_25-Jun-2014_.40_6pm_CET In other words: - 5.6: all forms of the skip-innodb option should give the standard deprecation warning. MTR tests should be updated to tolerate that. - 5.7: neither of the skip-innodb options disables InnoDB (i.e. there is no way to disable InnoDB in 5.7). However, using any of them (including loose-skip-innodb) results in the following warning being put into the error log: " The use of InnoDB is mandatory since MySQL 5.7. The former options like '--innodb=0/1/OFF/ON' or '--skip-innodb' are ignored " - 5.8: skip-innodb and innodb=OFF will result in an error as unknown options. loose-skip-innodb will have no effect (silently ignored as unknown option). There will be no way to disable InnoDB. InnoDB changes -------------- A new debug option (innodb_lock_no_retry) should be added, which instructs InnoDB to fail immediately when locks can not be acquired on startup (instead of making 100 attempts). mysql-test-run.pl changes ------------------------- The MTR should put the [embedded] section into the configuration file even if it's run in the normal mode since there will be a test case which runs embedded tools in the normal mode (and embedded tools require the [embedded] section). The MTR test suite changes ========================== All tests using the skip-innodb option can be divided into the following groups: 1. Tests which use skip-innodb for decreasing the test time (by turning off InnoDB): - main.warnings - main.myisam-blob - main.no_threads The skip-innodb option can be simply removed for those tests without much visible effect. 2. Tests which essentially depends on skip-innodb: - i_main.bootstrap - i_main.pid_file_issue - main.bootstrap - main.mysql_embedded The main reason for disabling InnoDB is the ability to start another server instance on the same data directory (MyISAM allows that, InnoDB does not). The general solution is to shutdown one server instance before starting another one so that there is only one active instance at a time. The tests in this group should be examined individually. 3. Tests verifying skip-innodb behavior: - i_binlog.binlog_row_innodb_disabled - i_binlog.binlog_stm_mix_innodb_disabled - i_innodb.innodb_bug14756795 - i_rpl.rpl_innodb_disabled Such tests should be disabled or removed. 4. Dead code. The skip-innodb option is used in the following file - ndb_rpl_multi_binlog_update.cnf which is in turn used in files below - ndb_rpl_slave_lsu_anyval.cnf - ndb_rpl_slave_lsu.cnf However, none of these files seem to be used in real test cases. Also, the Cluster (NDB) lives in a different tree, so the files are mosy likely irrelevant. Let's examine the tests from (2) in details. bootstrap (i_main.bootstrap and main.bootstrap) ----------------------------------------------- These tests check the server bootstrap mode by running mysqld with the --bootstrap command line option. In order to get rid of the skip-innodb option in the test script, the server instance started by MTR should be stopped before running the server in the bootstrap mode. The opt-file has the skip-innodb option, but it actually doesn't matter as the MTR server instance will be stopped anyway. i_main.pid_file_issue --------------------- The purpose of this test is to make sure that pid-file is not removed when another server instance is attempted to start (i.e. start another server instance conflicting with the previous one). The conflicting server instance should fail to start without removing the pid-file of the 1st instance. With MyISAM another server instance failed to start due to conflicting network parameters. With InnoDB another server instance fails to start due to locks within InnoDB. The solution is to introduce a special debug-option telling InnoDB to report an error immediately (without making 100 attempts to acquire the lock). Then, we'll set that debug-option for the second (conflicting) server instance the test case is starting. The proposed name for the debug-option: innodb_lock_no_retry main.mysql_embedded ------------------- This test used to be run in the embedded mode only, which means MTR started an embedded server instance before executing mysql_embedded.test. The test however does not use the started instance in any way. Instead, the test runs the mysql_embedded tool to execute some custom queries. The mysql_embedded tool starts another instance, so it is not possible to use it without the skip-innodb option. There is no way to shutdown an embedded server instance from MTR. There is a separate on that (WL#7952: Enable shutdown & restart of embedded server from MTR test). The solution consists of the following items: - run mysql_embedded.test in the regular (not embedded) mode, meaning that a regular server instance will be started by MTR; - stop the server instance started by MTR in mysql_embedded.test before executing the mysql_embedded tool; - unfortunately, MTR in the embedded mode creates slightly different configuration. Thus, the mysql_embedded tool does not start with the configuration created for regular MTR run. In order to address that the following changes should be taken: - modify MTR so that the [embedded] section is always put in the configuration; - prepare special configuration file in the mysql_embedded.test which does not contain SSL-related options (the mysql_embedded tool does not work if they are present).
Copyright (c) 2000, 2019, Oracle Corporation and/or its affiliates. All rights reserved.