This section provides troubleshooting suggestions for problems starting the server on Unix. If you are using Windows, see Section 2.5.6, “Troubleshooting a MySQL Installation Under Windows”.
If you have problems starting the server, here are some things to try:
Check the error log to see why the server does not start.
Specify any special options needed by the storage engines you are using.
Make sure that the server knows where to find the data directory.
Make sure that the server can access the data directory. The ownership and permissions of the data directory and its contents must be set such that the server can read and modify them.
Verify that the network interfaces the server wants to use are available.
Some storage engines have options that control their behavior.
You can create a my.cnf
file and specify
startup options for the engines that you plan to use. If you are
going to use storage engines that support transactional tables
(InnoDB
, NDB
),
be sure that you have them configured the way you want before
starting the server:
If you are using InnoDB
tables, see
Section 13.6.2, “InnoDB
Configuration”.
If you are using MySQL Cluster, see Section 17.3, “MySQL Cluster Configuration”.
MySQL Enterprise. For expert advice on start-up options appropriate to your circumstances, subscribe to The MySQL Enterprise Monitor. For more information, see http://www.mysql.com/products/enterprise/advisors.html.
Storage engines will use default option values if you specify none, but it is recommended that you review the available options and specify explicit values for those for which the defaults are not appropriate for your installation.
When the mysqld server starts, it changes location to the data directory. This is where it expects to find databases and where it expects to write log files. The server also writes the pid (process ID) file in the data directory.
The data directory location is hardwired in when the server is
compiled. This is where the server looks for the data directory
by default. If the data directory is located somewhere else on
your system, the server will not work properly. You can
determine what the default path settings are by invoking
mysqld with the
--verbose
and
--help
options.
If the default locations don't match the MySQL installation layout on your system, you can override them by specifying options to mysqld or mysqld_safe on the command line or in an option file.
To specify the location of the data directory explicitly, use
the --datadir
option. However,
normally you can tell mysqld the location of
the base directory under which MySQL is installed and it looks
for the data directory there. You can do this with the
--basedir
option.
To check the effect of specifying path options, invoke
mysqld with those options followed by the
--verbose
and
--help
options. For example, if
you change location into the directory where
mysqld is installed and then run the
following command, it shows the effect of starting the server
with a base directory of /usr/local
:
shell> ./mysqld --basedir=/usr/local --verbose --help
You can specify other options such as
--datadir
as well, but
--verbose
and
--help
must be the last options.
Once you determine the path settings you want, start the server
without --verbose
and
--help
.
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 host_name
variables
host_name
is the name of the MySQL
server host.
If you get Errcode 13
(which means
Permission denied
) when starting
mysqld, this means that the privileges of the
data directory or its contents do not allow the server access.
In this case, you change the permissions for the involved files
and directories so that the server has the right to use them.
You can also start the server as root
, but
this raises security issues and should be avoided.
On Unix, change location into the data directory and check the
ownership of the data directory and its contents to make sure
the server has access. For example, if the data directory is
/usr/local/mysql/var
, use this command:
shell> ls -la /usr/local/mysql/var
If the data directory or its files or subdirectories are not
owned by the login account that you use for running the server,
change their ownership to that account. If the account is named
mysql
, use these commands:
shell>chown -R mysql /usr/local/mysql/var
shell>chgrp -R mysql /usr/local/mysql/var
If it possible that even with correct ownership, MySQL may fail to start up if there is other security software running on your system that manages application access to various parts of the file system. In this case, you may need to reconfigure that software to enable mysqld to access the directories it uses during normal operation.
If the server fails to start up correctly, check the error log.
Log files are located in the data directory (typically
C:\Program Files\MySQL\MySQL Server
5.1\data
on Windows,
/usr/local/mysql/data
for a Unix binary
distribution, and /usr/local/var
for a Unix
source distribution). Look in the data directory for files with
names of the form
and
host_name
.err
,
where host_name
.loghost_name
is the name of your
server host. Then examine the last few lines of these files. On
Unix, you can use tail
to display them:
shell>tail
shell>host_name
.errtail
host_name
.log
The error log should contain information that indicates why the server couldn't start.
If either of the following errors occur, it means that some other program (perhaps another mysqld server) is using the TCP/IP port or Unix socket file that mysqld is trying to use:
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...
Use ps to determine whether you have another mysqld server running. If so, shut down the server before starting mysqld again. (If another server is running, and you really want to run multiple servers, you can find information about how to do so in Section 5.6, “Running Multiple MySQL Servers on the Same Machine”.)
If no other server is running, try to execute the command
telnet
. (The
default MySQL port number is 3306.) Then press Enter a couple of
times. If you don't get an error message like your_host_name
tcp_ip_port_number
telnet:
Unable to connect to remote host: Connection refused
,
some other program is using the TCP/IP port that
mysqld is trying to use. You'll need to track
down what program this is and disable it, or else tell
mysqld to listen to a different port with the
--port
option. In this case,
you'll also need to specify the port number for client programs
when connecting to the server via TCP/IP.
Another reason the port might be inaccessible is that you have a firewall running that blocks connections to it. If so, modify the firewall settings to allow access to the port.
If the server starts but you can't connect to it, you should
make sure that you have an entry in
/etc/hosts
that looks like this:
127.0.0.1 localhost
This problem occurs only on systems that do not have a working thread library and for which MySQL must be configured to use MIT-pthreads.
If you cannot get mysqld to start, you can
try to make a trace file to find the problem by using the
--debug
option. See
MySQL
Internals: Porting.
User Comments
Problem: I cannot start mysql an it stops and no messages in any log!
Solution:
I had a very stubborn problem starting mysqld_safe or mysqld; the server refused to keep running and simply got suspended. I tried to start the server right after installing the initial databases with mysql_install_db. The commands used as root to start the server were:
cd /usr/local/mysql
./bin/mysql_safe --user=mysql &
and the shell reported simply:
[1]+ Stopped ./bin/mysql_safe --user=mysql
The process was stuck, and I had to do a killall -9 mysql_safe to free it.
I couldn't find any error in var/(server).err or in the system logs. I discovered that redirecting the output of the server to the null device solved the problem:
./bin/mysql_safe --user=mysql > /dev/null &
The REAL solution:
The real cause was this: I was using the subshell of the Midnight Commander to test the starting of the server, and I guess this subshell did not assign a real tty device to the process, so it got deadlocked trying to write to stdout the "mysql started" message. Leaving the subshell and exiting MC proved that in normal shell everyting goes as the manual says.
This note has the goal of avoid someone else the loss of the three hours I spent solving this simple installation! :)
Also, make sure the directory (Slackware Users, from source)
/var/run/mysql/
exists and owned by mysql user.
Regards,
-Kenan Bektas
The error message "Bind on TCP/IP port: Address already in use..." can also be caused by having an invalid/wrong IP address for a bind-address directive in your my.cnf configuration file.
Add your own comment.