mysql_install_db initializes the MySQL
data directory and creates the system tables that it
contains, if they do not exist. 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 account
that will be used for running mysqld or
run it as root and use the
--user option to indicate the username that
mysqld will run as.
To invoke mysql_install_db, use the following syntax:
shell> mysql_install_db [options]
mysql_install_db needs to invoke
mysqld with the
--bootstrap and
--skip-grant-tables options (see
Section 2.4.14.2, “Typical configure Options”). If MySQL was
configured with the --disable-grant-options
option, --bootstap and
--skip-grant-tables will be disabled. To
handle this, set the MYSQLD_BOOTSTRAP
environment variable to the full pathname of a server that
has all options enabled. mysql_install_db
will use that server.
mysql_install_db supports the following options:
--basedir=
path
The path to the MySQL installation directory.
--force
Causes mysql_install_db to run even if DNS does not work. In that case, grant table entries that normally use hostnames will use IP addresses.
--datadir=,
path--ldata=
path
The path to the MySQL data directory.
--rpm
For internal use. This option is used by RPM files during the MySQL installation process.
--skip-name-resolve
Use IP addresses rather than hostnames when creating grant table entries. This option can be useful if your DNS does not work.
--srcdir=
path
For internal use. 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.0.32.
--user=
user_name
The login username to use for running
mysqld. Files and directories created
by mysqld will be owned by this user.
You must be 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
Verbose mode. Print more information about what the program does.
--windows
For internal use. This option is used for creating Windows distributions.

User Comments
If you experience problems like "You have an error in your SQL Syntax near...", check net_buffer_length in your my.cnf.
In the "shipped" my-small.cnf/my-medium.cnf files its been set to 2K/8K.
For any reason mysql_install_db fails when net_buffer_length is set to anything under 16k. It also works with the default value if you just dont specify it in the my.cnf.
I'd like to add a probably obvious note to Peter's comment.
On linux, the mysql_install_db script will look in /etc for a my.cnf file. It is likely that it will look in the defaults on most/all systems. If you are installing mysql on a system that already had mysql installed on it, it will use this old values.
In my case, I was installing mysql4 on a machine that had 3.23 installed on it, and the old net_buffer_link value was set to 8K. I wanted to mention this, since the instructions I used didn't explicitly mention that it is wise to look for old configuration information.
While instalingl mysql-4.0.20 from source on a Redhat 9 box which had mysql-3.23.xx preinstalled. I also needed to move the /etc/my.cnf to another location while I installed the privilege tables using bin/msyql_install_db
I ran mysql_install_db as root. When I ran the shell command, "mysql_safe --user=mysql &", it failed to run, just as described in this section. The error message in my ~.local.err file was "...failed to find host.frm (errno 13)...". I listed data/mysql, and found that all the files were owned by--you guessed it--root. Duh!! The simple fix was a shell command, "chmod -R mysql.mysql data/mysql". Everything seems fine now; if you have a similar problem, I hope this helps.
In a virgin installation of mysql-3.23.58-1.i386.rpm on RHEL3,
the installation directory appears to be /usr/share/mysql.
Running mysql_install_db gives the error message:
Didn't find /usr/libexec/mysqld
You should do a 'make install' before executing this script
There appears to be no documented solution to this at the moment.
[Re: previous post by William Hooper on July 2 2004 5:25pm]
Instead of chmod, I assume you meant: chown -R mysql.mysql data/mysql
I ran into same problem as posted above. The problem comes because the SQL server is not installed. Install the right rpm (mysql-server-*) and you are done!
=== original posted problem ===========
In a virgin installation of mysql-3.23.58-1.i386.rpm on RHEL3,
the installation directory appears to be /usr/share/mysql.
Running mysql_install_db gives the error message:
Didn't find /usr/libexec/mysqld
You should do a 'make install' before executing this script
There appears to be no documented solution to this at the moment.
Selbiges passiert auch wenn das loopback interface nicht konfiguriet ist, als ping localhost nicht antwortet
For all the linux Newbies out there--
I ran into an error 13- not allowing access to the /root/tmp folder. This essentially what is listed earlier on the page as you do not have write access to /tmp.
In my case this was due to the TMPDIR environtmental variable being set to /root/tmp. To view the environtmental variables, type 'env'.
By running the commands suggested, you temporarily change the TMPDIR environmental variable to /some_tmp_dir. If you have defined your MYSQL_UNIX_PORT in your build, it should probably be that directory.
shell> TMPDIR=/some_tmp_dir/
shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock
shell> export TMPDIR MYSQL_UNIX_PORT
hope this helps someone
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
After installing the distribution package mysql-standard-5.0.27-solaris8-sparc-64bit.pkg in its default location (/opt/mysql/mysql) I had to explicitely set the datadir when running "mysql_install_db":
mysql_install_db --user=mysql --datadir=/opt/mysql/mysql/data
otherwise, mysqld_safe failed with "Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist". I found the error by specifying --log-error:
mysqld_safe --user=mysql --verbose --log-error=/tmp/mysql.error.log
Add your own comment.