Connessione lenta a un database MySQL remoto

28 agosto 2013

Questo tipo di problema si è presentato quando le esigenze tecniche hanno richiesto di separare Application Server da Database Server all'interno di una LAN. La connessione da Application Server a Database Server era impostata usando un utenza del tipo utente@192.168.0.10.

MySQL, per i client che si collegano da remoto, mantiene una cache dove memorizza numero IP, nome host ed altre informazioni. Per far ciò il server tenta una risoluzione DNS IP->host name.

Se i DNS interni alla LAN non forniscono un reverse DNS lookup (PTR records) allora è probabile sperimentare un rallentamento nelle connessioni. Infatti MySQL tenterà ogni volta di reinserire nella cache il nome host, processo inevitabilmente destinato a fallire con un timeout.

Per disabilitare il DNS host name lookup è sufficiente far partire MySQL con l'opzione --skip-name-resolve. Basta modificare il file di configurazione my.cnf o my.ini aggiungendo alla sezione [mysqld] la riga seguente:
[mysqld]
................
--skip-name-resolve
e fare un restart di MySQL.
Così facendo verranno usati solo i numeri IP per controllare gli host nelle tabelle di grant . Attenzione però che ora dovranno essere usati solo account remoti specificati mediante numero IP.
Quanto descritto è documentato sul sito ufficiale all'indirizzo: http://dev.mysql.com/doc/refman/5.7/en/host-cache.html