Drupal - Database general error: 2006 MySQL server has gone away

9 times out of 10 this error is caused by an insufficiently large max_allowed_packet setting in your MySQL server's my.cnf file.

The standard default for MAMP in my experience is 1M, which isn't usually enough for Drupal (especially considering the size of some of the cache strings it generates).

Try increasing that setting gradually to see if the error disappears. I'm sure a quick google search will tell you how to do that in MAMP.


This MySQL/MariaDB error:

Error: 2006 (CR_SERVER_GONE_ERROR) - MySQL server has gone away

means basically that the client couldn't send a question to the server.

This could happen either by temporary glitch, too big or invalid SQL query, misconfiguration of your server or limitation of your hosting provider.

In general this error could be result of several things, such as:

  • a query to the server is incorrect or too large,

    Solution: Increase max_allowed_packet variable.

    Note: Make sure the variable is under [mysqld] section, not [mysql].

    Note: Don't forget to restart the MySQL/MariaDB server.

  • You got a timeout from the TCP/IP connection on the client side.

    Solution: Increase wait_timeout variable.

  • You tried to run a query after the connection to the server has been closed.

    Solution: A logic error in the application should be corrected.

  • Host name lookups failed (e.g. DNS server issue), or server has been started with --skip-networking option.

    Another possibility is that your firewall blocks the MySQL port (e.g. 3306 by default).

  • The running thread has been killed, so retry again.

  • You have encountered a bug where the server died while executing the query.

  • A client running on a different host does not have the necessary privileges to connect.

  • And many more, so learn more at: B.5.2.9 MySQL server has gone away.

For further details, please check your MySQL or system logs (e.g. /var/log/messages).

To debug MySQL server or client, please check: 26.5 Debugging and Porting MySQL.


In case you're trying to import the database from the file using drush or mysql command, you can:

  • Add a force option (-f) for mysql to proceed and execute rest of the queries.

    This is useful if the database has some large queries related to cache which are large, but not relevant anyway.

    Using drush, try: cat foo.sql | $(drush sqlconnect) -f

  • Try applying --max-allowed-packet option for mysql with smaller values.

  • Increase max_allowed_packet and wait_timeout in your server config (e.g. ~/.my.cnf).

  • Dump the original database again by using --skip-extended-insert option to break down the large queries. Then import the file again.


See also: ERROR 2006 (HY000): MySQL server has gone away


The answer that @Clive gives normally is the case, but there can be an additional cause, especially with node add forms.

Node add forms typically are big, and processing them can use a lot of memory (especially if there is any image processing during the save, like with the cropping modules). If the server runs out of memory, the mysqld process may get killed off which results in the same "gone away" message.

The clue is to look in the server logs. On a CentOS machine, you may see the following entry in /var/log/messages

Jan 1 00:00:00 servername kernel: Out of memory: Kill process XXXX (mysqld) score XXX or sacrifice child
Jan 1 00:00:00 servername kernel: Killed process XXXX, UID XX, (mysqld) total-vm:XXXkB, anon-rss:XXXkB, file-rss:XXkB

The solution here is to either add more RAM, or add/increase swap.

Tags:

Database