The world's most popular open source database
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.16.2, “Typical configure Options”). If MySQL was configured
with the --disable-grant-options option,
--bootstrap 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
mysql_install_db by default reads /etc/my.cnf
If you want it to read configuration data from somewhere else:
bin/mysql_install_db -defaults-file=somewhere-else
Add your own comment.