MySQL 5.7 Reference Manual Including MySQL NDB Cluster 7.5 and NDB Cluster 7.6

4.4.2 mysql_install_db — Initialize MySQL Data Directory


mysql_install_db is deprecated as of MySQL 5.7.6 because its functionality has been integrated into mysqld, the MySQL server. To initialize a MySQL installation, invoke mysqld with the --initialize or --initialize-insecure option. For more information, see Section 2.9.1, “Initializing the Data Directory”. You should expect mysql_install_db to be removed in a future MySQL release.

mysql_install_db handles initialization tasks that must be performed before the MySQL server, mysqld, is ready to use:

Secure-by-Default Deployment

Current versions of mysql_install_db produce a MySQL deployment that is secure by default, with these characteristics:

If mysql_install_db generates a random administative password, it writes the password to a file and displays the file name. The password entry includes a timestamp to indicate when it was written. By default, the file is .mysql_secret in the home directory of the effective user running the script. .mysql_secret is created with mode 600 to be accessible only to the operating system user for whom it is created.


When mysql_install_db generates a random password for the administrative account, it is necessary after mysql_install_db has been run to start the server, connect using the administrative account with the password written to the .mysql_secret file, and specify a new administrative password. Until this is done, the administrative account cannot be used for anything else. To change the password, you can use the SET PASSWORD statement (for example, with the mysql or mysqladmin client). After resetting the password, remove the .mysql_secret file; otherwise, if you run mysql_secure_installation, that command may see the file and expire the root password again as part of ensuring secure deployment.

Invocation Syntax

Change location to the MySQL installation directory and use this invocation syntax:

bin/mysql_install_db --datadir=path/to/datadir [other_options]

The --datadir option is mandatory. mysql_install_db creates the data directory, which must not already exist:

Because the MySQL server, mysqld, must access the data directory when it runs later, you should either run mysql_install_db from the same system account used for running mysqld, or run it as root and specify the --user option to indicate the user name that mysqld runs under. It might be necessary to specify other options such as --basedir if mysql_install_db does not use the correct location for the installation directory. For example:

bin/mysql_install_db --user=mysql \
    --basedir=/opt/mysql/mysql \

After mysql_install_db sets up the InnoDB system tablespace, changes to some tablespace characteristics require setting up a whole new instance. This includes the file name of the first file in the system tablespace and the number of undo logs. If you do not want to use the default values, make sure that the settings for the innodb_data_file_path and innodb_log_file_size configuration parameters are in place in the MySQL configuration file before running mysql_install_db. Also make sure to specify as necessary other parameters that affect the creation and location of InnoDB files, such as innodb_data_home_dir and innodb_log_group_home_dir.

If those options are in your configuration file but that file is not in a location that MySQL reads by default, specify the file location using the --defaults-extra-file option when you run mysql_install_db.


If you have set a custom TMPDIR environment variable when performing the installation, and the specified directory is not accessible, mysql_install_db may fail. If so, unset TMPDIR or set TMPDIR to point to the system temporary directory (usually /tmp).

Administrative Account Creation

mysql_install_db creates an administrative account named 'root'@'localhost' by default.

mysql_install_db provides options that enable you to control several aspects of the administrative account:

For more information, see the descriptions of those options.

mysql_install_db assigns mysql.user system table rows a nonempty plugin column value to set the authentication plugin. The default value is mysql_native_password. The value can be changed using the --admin-auth-plugin option.

Default my.cnf File

mysql_install_db creates no default my.cnf file.


As of MySQL 5.7.18, my-default.cnf is no longer included in or installed by distribution packages.

With one exception, the settings in the default option file are commented and have no effect. The exception is that the file sets the sql_mode system variable to NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES. This setting produces a server configuration that results in errors rather than warnings for bad data in operations that modify transactional tables. See Section 5.1.10, “Server SQL Modes”.

Command Options

mysql_install_db supports the following options, which can be specified on the command line or in the [mysql_install_db] group of an option file. For information about option files used by MySQL programs, see Section, “Using Option Files”.

Table 4.8 mysql_install_db Options

Option Name Description
--admin-auth-plugin Administrative account authentication plugin
--admin-host Administrative account name host part
--admin-require-ssl Require SSL for administrative account
--admin-user Administrative account name user part
--basedir Path to base directory
--builddir Path to build directory (for out-of-source builds)
--datadir Path to data directory
--defaults Read default option files
--defaults-extra-file Read named option file in addition to usual option files
--defaults-file Read only named option file
--extra-sql-file Optional SQL file to execute during bootstrap
--help Display help message and exit
--insecure Do not generate administrative account random password
--lc-messages Locale for error messages
--lc-messages-dir Directory where error messages are installed
--login-file File to read for login path information
--login-path Read login path options from .mylogin.cnf
--mysqld-file Path to mysqld binary
--no-defaults Read no option files
--random-password-file File in which to write administrative account random password
--skip-sys-schema Do not install or upgrade the sys schema
--srcdir For internal use
--user Operating system user under which to execute mysqld
--verbose Verbose mode
--version Display version information and exit