MySQL 5.1 Reference Manual  /  ...  /  mysql_install_db — Initialize MySQL Data Directory

4.4.5 mysql_install_db — Initialize MySQL Data Directory

mysql_install_db initializes the MySQL data directory and creates the system tables that it contains, if they do not exist. mysql_install_db is a shell script and is available only on Unix platforms.

To invoke mysql_install_db, use the following syntax:

shell> mysql_install_db [options]

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 that will be used for running mysqld, or run it as root and specify the --user option to indicate the user name that mysqld will run as. It might be necessary to specify other options such as --basedir or --datadir if mysql_install_db does not use the correct locations for the installation directory or data directory. For example:

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

mysql_install_db needs to invoke mysqld with the --bootstrap and --skip-grant-tables options. If MySQL was configured with the --disable-grant-options option, --bootstrap and --skip-grant-tables will be disabled (see Section 2.11.4, “MySQL Source-Configuration Options”). To handle this, set the MYSQLD_BOOTSTRAP environment variable to the full path name of a server that has all options enabled. mysql_install_db will use that server.


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).

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 used by MySQL programs, see Section 4.2.6, “Using Option Files”. mysql_install_db also supports the options for processing option files described at Section 4.2.7, “Command-Line Options that Affect Option-File Handling”.

  • --help

    Display a help message and exit.

  • --basedir=dir_name

    The path to the MySQL installation directory.

  • --builddir=dir_name

    For use with --srcdir and out-of-source builds. Set this to the location of the directory where the built files reside.

  • --cross-bootstrap

    For internal use. This option is used for building system tables on one host intended for another.

  • --datadir=dir_name

    The path to the MySQL data directory.

  • --defaults-extra-file=file_name

    Read this option file after the global option file but (on Unix) before the user option file. If the file does not exist or is otherwise inaccessible, an error occurs. file_name is interpreted relative to the current directory if given as a relative path name rather than a full path name.

  • --defaults-file=file_name

    Use only the given option file. If the file does not exist or is otherwise inaccessible, an error occurs. file_name is interpreted relative to the current directory if given as a relative path name rather than a full path name.

  • --force

    Cause mysql_install_db to run even if DNS does not work. Grant table entries normally created using host names will use IP addresses instead.

  • --ldata=dir_name

    A synonym for --datadir.

  • --no-defaults

    Do not read any option files. If program startup fails due to reading unknown options from an option file, --no-defaults can be used to prevent them from being read.

  • --rpm

    For internal use. This option is used during the MySQL installation process for install operations performed using RPM packages.

  • --skip-name-resolve

    Use IP addresses rather than host names when creating grant table entries. This option can be useful if your DNS does not work.

  • --srcdir=dir_name

    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. This option was added in MySQL 5.1.14.

  • --user=user_name

    The system (login) user name to use for running mysqld. Files and directories created by mysqld will be owned by this user. You must be the system root user 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

    Verbose mode. Print more information about what the program does.

  • --windows

    For internal use. This option is used for creating Windows distributions.

User Comments
  Posted by Jack Daniels on July 28, 2006
If you suspect permission problems and but find all file and
directory permissions in place and ok then selinux must be
giving the problem. I know because I ran into it.

Try disabling selinux (by running system-config-securitylevel
on fedora core 3 which i have) and retry. It things work out
then fine tune selinux for your system

  Posted by Ed Lazor on December 2, 2009
Ubuntu 9.10
Moving the database from /var/lib/mysql to /data/databases/mysql

You'll get errors when running mysql_install_db until you go into /etc/apparmor.d, update the usr.sbin.mysql file, and run /etc/init.d/apparmor restart

You may also get an error when running /etc/init.d/mysql start:

Access denied for user debian-sys-maint at localhost

Check /etc/mysql/debian.cnf for the account information.

You'll need to run mysql, add the grant tables, and then restart mysql.
Sign Up Login You must be logged in to post a comment.