This section provides troubleshooting suggestions for problems starting the server on Unix. If you are using Windows, see Section 2.3.13, “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 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/varshell>chgrp -R mysql /usr/local/mysql/var
          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
          host_name.errhost_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>tailshell>host_name.errtailhost_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_numbertelnet: 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.