MySQL: Starting MySQL….. ERROR! The server quit without updating PID file

This step-by-step guide is mainly for FreeBSD, however the idea is the same for Linux. Every once a while, when I update my FreeBSD box, the system likes to shutdown my MySQL server. Therefore, I need to start it again after the update is done. Unfortunately, the upgrade process is not smooth every time. Sometimes it will throw me some error.

/usr/local/etc/rc.d/mysql.server start

Oh well, I got the following error messages:

Starting MySQL..... ERROR! The server quit without updating PID file.

Sometimes, the message will tell you the exact location of which PID file:

Starting MySQL..... ERROR! The server quit without updating PID file (/var/db/mysql/www.icesquare.com.pid).

There are several solutions to troubleshoot these problems. I will go over each one by one.

Solution 1: Reboot The Computer

Although it sounds simple, but it really works. During the system upgrade, the OS may disable some of your daemons. Instead of troubleshooting each one by one, the easiest way is to start everything over. For example, I experienced this problem today after upgrading the Apache and Ruby (Yes, MySQL is not part of the update), and I got this error message afterward. After rebooting the computer, the error message is gone.

Solution 2: Remove Your MySQL Config File

If you have modified your MySQL configuration file, MySQL may not like it few versions after (MySQL is not backward compatibility friendly). It can be the problem of using an unsupported variable, or something similar. The easiest way is to remove your configuration file, and try to start the MySQL server again:

Backup your MySQL configuration first.

mv /etc/my.cnf /etc/my.cnf.backup

And restart the MySQL server again:

/usr/local/share/mysql/mysql.server start

Hopefully you will see the following message:

Starting MySQL. SUCCESS!

Solution 3: Upgrade Your Database File

Sometimes, the newer MySQL doesn’t like the database created in earlier version. I discovered this when I upgrade to MySQL 5.5.7:

Starting MySQL..... ERROR! The server quit without updating PID file (/var/db/mysql/www.icesquare.com.pid).

Since MySQL tells me which PID file causes the problem, I open the file and take a look what’s going on:

sudo tail /var/db/mysql/www.icesquare.com.err

And I saw something interesting: tables: Table ‘mysql.proxies_priv’ doesn’t exist:

101112 10:49:16  InnoDB: Initializing buffer pool, size = 128.0M
101112 10:49:16  InnoDB: Completed initialization of buffer pool
101112 10:49:16  InnoDB: highest supported file format is Barracuda.
101112 10:49:17  InnoDB: 1.1.3 started; log sequence number 1589404
101112 10:49:17 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.proxies_priv' doesn't exist
101112 10:49:17 mysqld_safe mysqld from pid file /var/db/mysql/www.icesquare.com.pid ended

The reason is very simple. MySQL could not open a table created in the earlier version (< 5.7.7) because it is not compatible with the current version. So, we can try to start the MySQL in safe mode through rc.d. First, you can edit the /etc/rc.conf and put the following into the file:

mysql_enable="YES"
mysql_args="--skip-grant-tables --skip-networking"

Restart MySQL through rc.d:

/usr/local/etc/rc.d/mysql-server start

If you did it right, you should see something like the following:

Starting MySQL.. SUCCESS!

Now, MySQL is already running the safe-mode. We want to perform a MySQL upgrade on all tables:

sudo mysql_upgrade

You should see something like this:

Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock'
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock'
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Running 'mysql_fix_privilege_tables'...
OK

Now, we want to switch the MySQL back to normal mode by commenting the extra options in /etc/rc.conf:

mysql_enable="YES"
#mysql_args="--skip-grant-tables --skip-networking"

And restart MySQL through /etc/rc.d:

/usr/local/etc/rc.d/mysql-server restart

Now the MySQL is up and running again!

Happy MySQLing.

–Derrick

Our sponsors:

37 Replies to “MySQL: Starting MySQL….. ERROR! The server quit without updating PID file”

  1. Erwane

    Hi, doing the same and … not working ^^

    FreeBSD 8.0-STABLE x64
    upgrading from mysql 5.5.6 to 5.5.7

    ok, i’ve upgraded, stop server, restart with skip grant tables (and network) tried to upgrade and … crash.

    ( .. all tables pass OK …)
    Running ‘mysql_fix_privilege_tables’…
    ERROR 1146 (42S02) at line 1127: Table ‘mysql.proxies_priv’ doesn’t exist
    FATAL ERROR: Upgrade failed

    any ideas ?

    Reply
  2. Erwane

    i’ve found the solution in mysql sources

    CREATE TABLE IF NOT EXISTS proxies_priv (Host char(60) binary DEFAULT ” NOT NULL, User char(16) binary DEFAULT ” NOT NULL, Proxied_host char(60) binary DEFAULT ” NOT NULL, Proxied_user char(16) binary DEFAULT ” NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor char(77) DEFAULT ” NOT NULL, Timestamp timestamp, PRIMARY KEY Host (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment=’User proxy privileges’;

    mysql_upgrade work fine after that … dunno why this table wasn’t created.

    Reply
  3. Jibster

    I had the same problem (on Mac) but not quite the same solution:

    # /usr/local/mysql/support-files/mysql.server start
    Starting MySQL
    …………………………………………… ERROR! The server quit without updating PID file (/usr/local/mysql/data/XXXXXX.pid).

    Run the following command
    # ps aux | grep mysql | grep -v grep

    It should output something like this:
    _mysql 204 0.0 1.2 2656240 51000 ?? S 10:04am 0:02.88 /usr/local/mysql/bin/mysqld –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –plugin-dir=/usr/local/mysql/lib/plugin –user=mysql –log-error=/usr/local/mysql/data/XXXXXXXX.err –pid-file=/usr/local/mysql/data/XXXXXXXX.pid –socket=/var/mysql/mysql.sock
    root 117 0.0 0.0 2435548 812 ?? S 10:04am 0:00.02 /bin/sh /usr/local/mysql/bin/mysqld_safe –datadir=/usr/local/mysql/data –pid-file=/usr/local/mysql/data/XXXXXXXX.pid

    All you need to do now is to kill the process by using kill command

    # kill 204

    Check the process again if it’s been killed
    # ps aux | grep mysql | grep -v grep

    Now start your mysql sever
    sh-3.2# /usr/local/mysql/support-files/mysql.server start

    You should see
    Starting MySQL
    .. SUCCESS!

    🙂

    Reply
  4. delphi1000

    I think #/usr/local/etc/rc.d/mysql-server start should be changed as
    #/usr/local/etc/rc.d/mysql-server onestart and ignore
    mysql_enable=”YES”
    mysql_args=”–skip-grant-tables –skip-networking”.It is safe and easy to handle.

    Reply
  5. Pingback: [MySQL 5.5] Starting MySQL … * The server quit without updating PID file | Jinny's Blog

  6. CraigMC

    FYI another cause I’ve found for this error:
    Running MySQL enterprise 5.5.16
    From the slave DB server, I was unable to change the port and restart the mysqld daemon, and was getting the “server quit without updating PID file” error.

    To get around this, stop:
    mysql
    AND
    mysql-monitor-agent

    Make changes to my.cnf

    restart mysql
    restart mysql-monitor-agent

    Simple solution, I know, but hopefully saves someone some time out there.

    Reply
  7. Tim

    Derrick- You are the man!! I read many forums suggestions, with no luck, your suggestion fix it!!! Solution 2 worked for me..
    Thanks man and i owe you a beer 🙂

    Reply
  8. Pingback: Bookmark 17 feb 14__PC | maulikblog

  9. Pingback: cmake安装mysql-5.5.33后无法启动 | 流年易逝

  10. wanghaijun

    Hi Alex,

    Starting MySQL.The server quit without updating PID file (/usr/local/mysql/data/iZ23kzogmn2Z.pid).

    [haijun@iZ23kzogmn2Z mysql]$ sudo tail /usr/local/mysql/data/kanhunli-test-wedding.err
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘MRG_MYISAM’
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘CSV’
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘MEMORY’
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘sha256_password’
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘mysql_old_password’
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘mysql_native_password’
    2015-09-01 21:18:15 5234 [Note] Shutting down plugin ‘binlog’
    2015-09-01 21:18:15 5234 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

    150901 21:18:15 mysqld_safe mysqld from pid file /usr/local/mysql/data/kanhunli-test-wedding.pid ended

    Can i help me?

    Reply
  11. Abhishek A

    hey i’m getting the same error.. when i checked log file it says mysql.host file doesnt exist..how to solve this??..ant idea ?

    Reply
  12. Pingback: centos7 mysql The server quit without updating PID file(错误解决) - 51geeks

Leave a Reply to Daniel Cancel reply

Your email address will not be published. Required fields are marked *