After installing MySQL, you must initialize the data directory,
including the tables in the
database. For some MySQL installation methods, data directory
initialization may be done automatically, as described in
Section 2.10, “Postinstallation Setup and Testing”. For other installation
methods, including installation from generic binary and source
distributions, you must initialize the data directory yourself.
This section describes how to initialize the data directory on Unix and Unix-like systems. (For Windows, see Section 2.3.9, “Windows Postinstallation Procedures”.) For some suggested commands that you can use to test whether the server is accessible and working properly, see Section 2.10.3, “Testing the Server”.
In the examples shown here, the server runs under the user ID of
mysql login account. This assumes that such
an account exists. Either create the account if it does not exist,
or substitute the name of a different existing login account that
you plan to use for running the server. For information about
creating the account, see
mysql System User and Group, in
Section 2.2, “Installing MySQL on Unix/Linux Using Generic Binaries”.
Change location into the top-level directory of your MySQL
installation, represented here by
BASEDIR is likely to be something
/usr/local. The following steps assume
that you have changed location to this directory.
You will find several files and subdirectories in the
BASEDIR directory. The most
important for installation purposes are the
subdirectories, which contain the server as well as client and
If necessary, ensure that the distribution contents are
mysql. If you installed the
mysql, no further action is
required. If you installed the distribution as
root, its contents will be owned by
root. Change its ownership to
mysql by executing the following commands
root in the installation directory. The
first command changes the owner attribute of the files to the
mysql user. The second changes the group
attribute to the
chown -R mysql .shell>
chgrp -R mysql .
If necessary, initialize the data directory, including the
mysql database containing the initial MySQL
grant tables that determine how users are permitted to connect
to the server.
Typically, data directory initialization need be done only the first time you install MySQL. If you are upgrading an existing installation, you should run mysql_upgrade instead (see Section 4.4.7, “mysql_upgrade — Check and Upgrade MySQL Tables”). However, the command that initializes the data directory does not overwrite any existing privilege tables, so it should be safe to run in any circumstances.
It is important to make sure that the database directories and
files are owned by the
mysql login account
so that the server has read and write access to them when you
run it later. To ensure this if you run
root, include the
--user option as
shown. Otherwise, you should execute the program while logged
mysql, in which case you can omit the
--user option from
The mysql_install_db command creates the
server's data directory. Under the data directory, it creates
directories for the
mysql database that
holds the grant tables and the
database that you can use to test MySQL. The program also
creates privilege table entries for the initial account or
test_. For a complete listing and
description of the grant tables, see
Section 6.2, “The MySQL Access Privilege System”.
It might be necessary to specify other options such as
mysql_install_db does not identify the
correct locations for the installation directory or data
directory. For example:
scripts/mysql_install_db --user=mysql \
If you do not want to have the
database, you can remove it after starting the server, using
the instructions in Section 2.10.4, “Securing the Initial MySQL Accounts”.
If you have trouble with mysql_install_db at this point, see Section 126.96.36.199, “Problems Running mysql_install_db”.
After initializing the data directory, you can establish the
final installation ownership settings. To leave the
installation owned by
mysql, no action is
required here. Otherwise, most of the MySQL installation can
be owned by
root if you like. The exception
is that the data directory must be owned by
mysql. To accomplish this, run the
following commands as
root in the
installation directory. For some distribution types, the data
directory might be named
var rather than
data; adjust the second command
chown -R root .shell>
chown -R mysql data
If the plugin directory (the directory named by the
plugin_dir system variable)
is writable by the server, it may be possible for a user to
write executable code to a file in the directory using
SELECT ... INTO
DUMPFILE. This can be prevented by making the plugin
directory read only to the server or by setting the
secure_file_priv system variable at server
startup to a directory where
SELECT writes can be performed
If you installed MySQL using a source distribution, you may
want to optionally copy one of the provided configuration
files from the
/etc directory. There are
different sample configuration files for different use cases,
server types, and CPU and RAM configurations. To use one of
these standard files, copy it to
/etc/mysql/my.cnf and edit and check the
configuration before starting your MySQL server for the first
You can also create
my.cnf yourself and
place into it the options the server should use at startup.
See Section 5.1.2, “Server Configuration Defaults”.
If you do not copy one of the standard configuration files or create your own, the MySQL server starts with its default settings.
If you want MySQL to start automatically when you boot your machine, see Section 2.10.5, “Starting and Stopping MySQL Automatically”.
Data directory initialization creates time zone tables in the
mysql database but does not populate them. To
do so, use the instructions in
Section 10.6, “MySQL Server Time Zone Support”.