# dovecot: auth-worker: mysql server has gone away



## Kaimane (14. Jan. 2013)

*[gelöst] dovecot: auth-worker: mysql server has gone away*

Hallo zusammen.

Habe Dovecot auf Ubuntu 12.04 in Betrieb genommen. Wenn man sich per POP3 auf dem Server einloggt erscheint häufig:

```
Jan 14 15:35:00 s1 dovecot: auth-worker: Error: mysql: Query failed, retrying: MySQL server has gone away
Jan 14 15:35:00 s1 dovecot: pop3: Error: Internal auth failure (client-pid=29335 client-id=1)
```
Anbei die vers. Konfigurationen:

main.cf

```
alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
append_dot_mydomain = no
biff = no
body_checks = regexp:/etc/postfix/body_checks
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
content_filter = amavis:[127.0.0.1]:10024
dovecot_destination_recipient_limit = 1
header_checks = regexp:/etc/postfix/header_checks
html_directory = /usr/share/doc/postfix/html
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
mime_header_checks = regexp:/etc/postfix/mime_header_checks
mydestination = xxx.xxx.de, localhost, localhost.localdomain
myhostname = xxx.xxx.de
mynetworks = 172.16.0.0/12,127.0.0.0/8 [::1]/128
myorigin = /etc/mailname
nested_header_checks = regexp:/etc/postfix/nested_header_checks
owner_request_special = no
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
readme_directory = /usr/share/doc/postfix
receive_override_options = no_address_mappings
recipient_delimiter = +
relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
relay_recipient_maps = mysql:/etc/postfix/mysql-virtual_relayrecipientmaps.cf
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_message_rate_limit = 100
smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf, hash:/var/lib/mailman/data/virtual-mailman
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_transport = dovecot
virtual_uid_maps = static:5000
```
dovecot.conf

```
# 2.0.19: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.13-grsec-xxxx-grs-ipv6-64 x86_64 Ubuntu 12.04.1 LTS
auth_mechanisms = plain login
disable_plaintext_auth = no
listen = *,[::]
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = vmail
passdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
plugin {
  quota = dict:user::file:/var/vmail/%d/%n/.quotausage
  sieve = /var/vmail/%d/%n/.sieve
}
protocols = imap pop3
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-userdb {
    group = vmail
    mode = 0600
    user = vmail
  }
  user = root
}
ssl_cert = </etc/postfix/smtpd.cert
ssl_key = </etc/postfix/smtpd.key
userdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
protocol imap {
  mail_plugins = quota imap_quota
}
protocol pop3 {
  mail_plugins = quota
  pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
  mail_plugins = sieve quota
}
```
Hat jemand von euch einen Hinweis oder dieses Problem schon mal gehabt?
Danke im Voraus!


----------



## Till (14. Jan. 2013)

Hast Du denn Probleme beim Login per pop3 oder gehte s nur um die Meldung imLog? Laut Log war die mysql Verbindung nicht da, das kann z.B. durch einen mysql timeout sein und die Verbindung sollte dann automatisch von Dovecot wieder hergestellt werden.


----------



## Kaimane (14. Jan. 2013)

Nein, der Login per pop3 funktioniert. Nur die Häufigkeit des Fehlers macht mich stutzig. Jede Minute wird dieser ausgegeben. Kann man hier das timeout hochsetzen, damit der Fehler ausbleibt?

--- EDIT ---

Ich tippe hier eher auf Mysql.

Beim Versand über Roundcube erhalte ich teilweise 4.3.0 temporary lookup failure. Als könne er manchmal nicht in die DB schauen.
Auch beim Auth-Worker das Problem, das ständig die Verbindung abbricht.

Welche Stellschrauben kann man hier bei Mysql setzen, damit die Verbindungen nicht abgebrochen werden?

my.cnf

```
max_connections = 600
```
Ist derzeit eingestellt.
Gibt es vllt noch weitere Settings?


----------



## Till (14. Jan. 2013)

Google: mysql timeout

how to change timeout for mysql persistent connections - Stack Overflow
Setup MySQL query timeout - Stack Overflow
timeout - Terminating idle mysql connections - Stack Overflow


----------



## Kaimane (14. Jan. 2013)

Erst mal vielen Dank Till für deine Unterstützung.

Das Thema max_connections kann es nicht sein.
Seitdem Mysql läuft waren gerade mal 98 Verbindung im Peek gleichzeitig offen.

Zu deinen Links:
Die Mysql Doku spicht davon, dass die "Mysql server has gone away" Fehler meistens mit dem Timeout zu tun haben (MySQL :: MySQL 5.1 Referenzhandbuch :: A.2.8 MySQL server has gone away-Fehler).
Standardmäßig ist wait_timeout auf 28800 (also 8h) gesetzt.

Nun ist es mir jedoch ein Rätzel, wenn die max_connections nicht voll sind und der Timeout auf 8 Stunden steht, weshalb die Verbindung regelmäßig unterbrochen wird (Dovecot auth-worker, Postfix wähend der lookups).

Kann wait_timeout auf das geschilderte Problem Einfluss nehmen?
Gibt es ein empfohlenen Wert für wait_timeout?


----------



## Kaimane (15. Jan. 2013)

Kurzes Feedback zum o. g. Problem:

Es hatte weder etwas mit 'wait_timeout' zu tun noch mit 'max_connections', etc.
Am Ende lag es daran, dass MySQL mit dem falschen character-set und der falschen collation gestartet wurde.

In meinem Fall musste ich in der my.cnf

```
[mysqld]
#
# * Set Charset
#
character-set-server    = utf8
collation-server        = utf8_general_ci
```
setzen, damit wieder alles reibungslos lief.

Hintergrund: es handelte sich um einen Serverumzug.
MySQL wurde auf dem alten Server mit den o. g. Einstellungen betrieben.

Nochmal vielen Dank an dich Till, für deine Unterstützung!


----------



## Till (16. Jan. 2013)

Danke dass Du die Lösung gepostet hast!


----------

