Problems Starting the MySQL Server


If you are going to use tables that support transactions (InnoDB, BDB), you should first create a `my.cnf' file and set startup options for the table types you plan to use.

Generally, you start the mysqld server in one of these ways:

  • By invoking mysql.server. This script is used primarily at system startup and shutdown.
  • By invoking mysqld_safe, which tries to determine the proper options for mysqld and then runs it with those options.
  • By invoking mysqld directly.

When the mysqld daemon starts up, it changes the directory to the data directory. This is where it expects to write log files and the pid (process ID) file, and where it expects to find databases.

The data directory location is hardwired in when the distribution is compiled. However, if mysqld expects to find the data directory somewhere other than where it really is on your system, it will not work properly. If you have problems with incorrect paths, you can find out what options mysqld allows and what the default path settings are by invoking mysqld with the --help option. You can override the defaults by specifying the correct pathnames as command-line arguments to mysqld. (These options can be used with mysqld_safe as well.)

Normally you should need to tell mysqld only the base directory under which MySQL is installed. You can do this with the --basedir option. You can also use --help to check the effect of changing path options (note that --help must be the final option of the mysqld command). For example:

shell> EXECDIR/mysqld --basedir=/usr/local --help

Once you determine the path settings you want, start the server without the --help option.

Whichever method you use to start the server, if it fails to start up correctly, check the log file to see if you can find out why. Log files are located in the data directory (typically `/usr/local/mysql/data' for a binary distribution, `/usr/local/var' for a source distribution, and `\mysql\data\mysql.err' on Windows). Look in the data directory for files with names of the form `host_name.err' and `host_name.log' where host_name is the name of your server host. Then check the last few lines of these files:

shell> tail host_name.err
shell> tail host_name.log

Look for something like the following in the log file:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
000729 14:50:10  Can't init databases

This means that you didn't start mysqld with --bdb-no-recover and Berkeley DB found something wrong with its log files when it tried to recover your databases. To be able to continue, you should move away the old Berkeley DB log file from the database directory to some other place, where you can later examine it. The log files are named `log.0000000001', where the number will increase over time.

If you are running mysqld with BDB table support and mysqld core dumps at start this could be because of some problems with the BDB recover log. In this case you can try starting mysqld with --bdb-no-recover. If this helps, then you should remove all `log.*' files from the data directory and try starting mysqld again.

If you get the following error, it means that some other program (or another mysqld server) is already using the TCP/IP port or socket mysqld is trying to use:

Can't start server: Bind on TCP/IP port: Address already in use
  or
Can't start server : Bind on unix socket...

Use ps to make sure that you don't have another mysqld server running. If you can't find another server running, you can try to execute the command telnet your-host-name tcp-ip-port-number and press Enter a couple of times. If you don't get an error message like telnet: Unable to connect to remote host: Connection refused, something is using the TCP/IP port mysqld is trying to use.

If mysqld is currently running, you can find out what path settings it is using by executing this command:

shell> mysqladmin variables

or

shell> mysqladmin -h 'your-host-name' variables

If you get Errcode 13, which means Permission denied, when starting mysqld this means that you didn't have the right to read/create files in the MySQL database or log directory. In this case you should either start mysqld as the root user or change the permissions for the involved files and directories so that you have the right to use them.

If mysqld_safe starts the server but you can't connect to it, you should make sure you have an entry in `/etc/hosts' that looks like this:

127.0.0.1       localhost

This problem occurs only on systems that don't have a working thread library and for which MySQL must be configured to use MIT-pthreads.


Top                                                                                                                                                                      Back
Last Update: Thursday, June 24, 2003 | © 2002-2003 Kay Nix  ·  K-SeCuRiTy Timisoara, Romania