mysql_install_db initializes the MySQL data
directory and creates the system tables that it contains, if
they do not exist. It also initializes the
and related data structures needed to manage
mysql_install_db is a Perl script and can be
used on any system with Perl installed.
On Unix platforms, mysql_install_db creates a
default option file named
my.cnf in the
base installation directory. This file is created from a
template included in the distribution package named
my-default.cnf. You can find the template
in or under the base installation directory. When started using
mysqld_safe, the server uses
my.cnf file by default. If
my.cnf already exists,
mysql_install_db assumes it to be in use and
writes a new file named
With one exception, the settings in the default option file are
commented and have no effect. The exception is that the file
variable from its default of
NO_ENGINE_SUBSTITUTION to also
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.7, “Server SQL Modes”.
As of MySQL 5.7.2, when mysql_install_db
invokes the server to initialize the
database, the server assigns every
row a nonempty
plugin column value. The value
'mysql_native_password' unless the
system variable is set otherwise at server startup.
To invoke mysql_install_db, use the following syntax:
Because the MySQL server, mysqld, needs to
access the data directory when it runs later, you should either
run mysql_install_db from the same system
account that will be used for running mysqld
or run it as
root and use the
--user option to
indicate the user name that mysqld will run
as. It might be necessary to specify other options such as
mysql_install_db does not use the correct
locations for the installation directory or data directory. For
scripts/mysql_install_db --user=mysql \
If you have set a custom
variable when performing the installation, and the specified
directory is not accessible,
mysql_install_db may fail. If so, unset
TMPDIR or set
point to the system temporary directory (usually
After mysql_install_db sets up the
tablespace, changes to some of 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
configuration options are in place in the MySQL
file before running
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.
(Options that are common to mysqld can also
be specified in the
[mysqld] group.) Other
options are passed to mysqld. For information
about option files, see Section 220.127.116.11, “Using Option Files”.
mysql_install_db also supports the options
for processing option files described at
Section 18.104.22.168, “Command-Line Options that Affect Option-File Handling”.
The path to the MySQL installation directory.
The path to the MySQL data directory. Only the last component of the path name is created if it does not exist; the parent directory must already exist or an error occurs.
Cause mysql_install_db to run even if DNS does not work. Grant table entries that normally use host names will use IP addresses.
On Unix platforms, this option provides for more secure
MySQL installation. Invoking
causes it to perform the following actions in addition to
its normal operation:
Create a random password, assign it to the initial MySQL
root accounts, and set the
“password expired” flag for those accounts.
Write the initial password file to the
.mysql_secret file in the directory
named by the
variable. Depending on operating system, using a command
such as sudo may cause the value of
HOME to refer to the home directory
root system user.
.mysql_secret already exists,
the new password information is appended to it. Each
password entry includes a timestamp so that in the event
of multiple install operations it is possible to
determine the password associated with each one.
.mysql_secret is created with mode
600 to be accessible only to the system user for whom it
Remove the anonymous-user MySQL accounts.
As a result of these actions, it is necessary after
installation to start the server, connect as
root using the password written to the
.mysql_secret file, and to assign a new
root password. Until this is done,
root cannot do anything else. This must
be done for each
root account you intend
to use. To change the password, you can use the
SET PASSWORD statement (for
example, with the mysql client). You can
also use mysqladmin or
New install operations (not upgrades) using RPM packages and
Solaris PKG packages invoke
mysql_install_db with the
--random-passwords option. (Install
operations using RPMs for Unbreakable Linux Network are
unaffected because they do not use
For install operations using a binary
.tar.gz distribution or a source
distribution, you can invoke
mysql_install_db with the
--random-passwords option manually to make
your MySQL installation more secure. This is recommended,
particularly for sites with sensitive data.
For internal use. This option is used during the MySQL installation process for install operations performed using RPM packages.
Use IP addresses rather than host names when creating grant table entries. This option can be useful if your DNS does not work.
For internal use. This option specifies the directory under which mysql_install_db looks for support files such as the error message file and the file for populating the help tables.
The system (login) user name to use for running
mysqld. Files and directories created by
mysqld will be owned by this user. You
root to use this option. By
default, mysqld runs using your current
login name and files and directories that it creates will be
owned by you.
Verbose mode. Print more information about what the program does.
For internal use. This option is used for creating Windows distributions.