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
) formysql
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 formysql
with smaller values.Increase
max_allowed_packet
andwait_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.