Ich habe Probleme mit dem MySQL-Server (und wie Sie sehen, auch mit meinem Serverfault-Konto, nun, das ist eine andere Geschichte). Ich habe Fehler in Abfragen mit „MySQL-Server ist weg...“, ich verwende Debian Lenny, MySQL-Version 5.0.51a-24+lenny2-log, und hier ist die my.cnf-Konfiguration
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
#
# * Fine Tuning
#
wait_timeout = 28800
net_read_timeout = 60
net_write_timeout = 60
key_buffer = 384M
max_allowed_packet = 64M
thread_stack = 128K
thread_cache_size = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
#max_connections = 100
table_cache = 4096
sort_buffer = 2M
read_buffer = 2M
read_rnd_buffer = 64M
myisam_sort_buffer_size = 64M
#thread_concurrency = 10
#
# * Query Cache Configuration
#
query_cache_limit = 64M
query_cache_size = 32M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log = /var/log/mysql/mysql.log
#
# Error logging goes to syslog. This is a Debian improvement :)
#
# Here you can see queries with especially long duration
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * BerkeleyDB
#
# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
skip-bdb
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
#skip-innodb
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
[mysqldump]
quick
quote-names
max_allowed_packet = 32M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
#
# * NDB Cluster
#
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
#
# The following configuration is read by the NDB Data Nodes (ndbd processes)
# not from the NDB Management Nodes (ndb_mgmd processes).
#
# [MYSQL_CLUSTER]
# ndb-connectstring=127.0.0.1
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
Kann ich irgendetwas optimieren, um diesen Fehler zu beheben?
Danke!
Antwort1
Ich sehe zwei Möglichkeiten:
1. PHP braucht lange:
Wenn Sie PHP verwenden, kann die Ausführungszeit länger sein als die Timeouts von MySQL. Sie sollten dies mit PHP vergleichen net_read_timeout
. net_write_timeout
Wenn max_execution_time
die Ausführungszeit von PHP länger als 60 ist, wird MySQL möglicherweise die Verbindung trennen.
2. Überlasteter Server
Da Ihre wait_timeout
Variable 8 Stunden (28800 Sekunden) beträgt, könnten Sie durch inaktive MySQL-Verbindungen gestört werden. Verwenden Sie die show processlist
Abfrage, um zu sehen, wie viele inaktive Threads ausgeführt werden. Wenn Sie viele inaktive Threads haben, sollten Sie die wait_timeout
Anweisung möglicherweise verringern. Ich verwende derzeit einen Wert von 60 auf Produktionswebservern (und bisher hat sich niemand beschwert).
Wie dem auch sei, MySQL muss offensichtlich einige Einstellungen anpassen. Im Internet gibt es viele Artikel über MySQL-Tuning.
Antwort2
Die Meldung „gone away“ ist ein Zeichen dafür, dass der Server keine Lust mehr aufs Warten hat und die Verbindung geschlossen hat.
Sie sollten es durch Öffnen einer neuen Verbindung aufwecken können.
Antwort3
„MySQL ist weg“ bedeutet, dass Ihre Webanwendung den MySQL-Server nicht erreichen kann. Das würde bedeuten, dass er ausgefallen oder nicht erreichbar ist. Sie können dies mit einer anderen Webanwendung überprüfen.phpMyAdminoder die Befehlszeilenoption „show processlist;“, um zu sehen, was intern mit dem MySQL-Server passiert.
Wenn Ihr Server nicht über genügend Speicher für die Ausführung von MySQL verfügt, kommt es häufig zu einem solchen Ausfall. Überprüfen Sie Ihre Speichernutzung und stellen Sie sicher, dass Sie gemäß Ihren Einstellungen über genügend Speicher verfügen.