After installing MySQL, the data directory, including the tables
mysql system database, must be
initialized. For some MySQL installation methods, data directory
initialization can be done automatically, as described in
Chapter 3, 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 Windows Postinstallation Procedures.) For some suggested commands that you can use to test whether the server is accessible and working properly, see Section 3.3, “Testing the Server”.
In the examples shown here, the server is going to run under the
user ID of the
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
Installing MySQL on Unix/Linux Using Generic Binaries.
Change location into the top-level directory of your MySQL installation directory, which is typically
shell> cd /usr/local/mysql
You will find several files and subdirectories inside the folder, including the
scriptssubdirectories, which contain the server as well as the client and utility programs.
Initialize the data directory, including the
mysqldatabase 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 after you first installed MySQL. If you are upgrading an existing installation, you should run mysql_upgrade instead (see 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. Use the server to initialize the data directory; for example:
shell> scripts/mysql_install_db --user=mysql
It is important to make sure that the database directories and files are owned by the
mysqllogin account so that the server has read and write access to them when you run it later. To ensure this if you run mysql_install_db as
root, include the
--useroption as shown.
The mysql_install_db command initializes the server's data directory. Under the data directory, it creates directories for the
mysqldatabase that holds the grant tables and the
testdatabase that you can use to test MySQL. The program also creates privilege table entries for the initial account or accounts.
test_. For a complete listing and description of the grant tables, see Chapter 4, The MySQL Access Privilege System.
shell> scripts/mysql_install_db --user=mysql \ --basedir=/opt/mysql/mysql \ --datadir=/opt/mysql/mysql/data
For a more secure installation, invoke mysql_install_db with the
--random-passwordsoption. This causes it to assign a random password to the MySQL
rootaccounts, set the “password expired” flag for those accounts, and remove the anonymous-user MySQL accounts. For additional details, see mysql_install_db — Initialize MySQL Data Directory. (Install operations using RPMs for Unbreakable Linux Network are unaffected because they do not use mysql_install_db.)
If you do not want to have the
testdatabase, you can remove it after starting the server, using the instructions in Section 3.4, “Securing the Initial MySQL Accounts”.
If you have trouble with mysql_install_db at this point, see Section 3.1.1, “Problems Running mysql_install_db”.
To specify options that the MySQL server should use at startup, put them in a
/etc/mysql/my.cnffile. See Server Configuration Defaults. If you do not do this, the server starts with its default settings.
If you want MySQL to start automatically when you boot your machine, see Section 3.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
MySQL Server Time Zone Support.