mysql_install_db initializes the MySQL data directory and creates the system tables that it contains, if they do not exist.
To invoke mysql_install_db, use the following syntax:
shell> mysql_install_db [options
]
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 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 \
--datadir=/opt/mysql/mysql/data
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 path name of a server that has all options enabled.
mysql_install_db will use that server.
mysql_install_db supports the following
options, which can be specified on the command line or in the
[mysql_install_db]
and (if they are common to
mysqld) [mysqld]
option
file groups.
The path to the MySQL installation directory.
Cause mysql_install_db to run even if DNS does not work. In that case, grant table entries that normally use host names will use IP addresses.
The path to the MySQL data directory.
For internal use. This option is used by RPM files during the MySQL installation process.
Use IP addresses rather than host names when creating grant table entries. This option can be useful if your DNS does not work.
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.
The login user name 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 mode. Print more information about what the program does.
For internal use. This option is used for creating Windows distributions.
User Comments
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
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
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.
Add your own comment.