# rm-rf.es

MySQL: resolución de nombres (DNS) y problemas con conexiones remotas

Durante un rato, hoy me ha traído de cabeza un problema con un servidor MySQL en el que se estaban encolando todas las conexiones, las cuales no llegaban a conectar y se bloqueaban del siguiente modo:

| 64 | unauthenticated user | 10.0.3.17:37723 |               | Connect |      | login |                  |
| 65 | unauthenticated user | 10.0.3.6:45973  |               | Connect |      | login |                  |
| 66 | unauthenticated user | 10.0.3.6:45974  |               | Connect |      | login |                  |
| 67 | unauthenticated user | 10.0.3.6:45975  |               | Connect |      | login |                  |
| 68 | unauthenticated user | 10.0.3.6:45976  |               | Connect |      | login |                  |
| 69 | unauthenticated user | 10.0.3.6:45977  |               | Connect |      | login |                  |
| 70 | unauthenticated user | 10.0.3.6:45978  |               | Connect |      | login |                  |
| 71 | unauthenticated user | 10.0.3.6:45979  |               | Connect |      | login |                  |
| 72 | unauthenticated user | 10.0.3.6:45980  |               | Connect |      | login |                  |
| 73 | unauthenticated user | 10.0.3.6:45981  |               | Connect |      | login |                  |

En el momento que he verificado que el problema surgía únicamente con las conexiones remotas he comenzado a revisar las distintas posibilidades, entre las que se encontraba por ejemplo revisar que los usuarios MySQL estuvieran correctamente configurados, que no hubiera problemas en las bases de datos, etc. Pero realmente el problema surgía mucho antes, en el momento en el que se establecía la conexión, antes de siquiera pedir credenciales.

En este caso el problema radicaba en que los servidores DNS configurados para la máquina (en /etc/resolv.conf) no funcionaban correctamente e impedían a MySQL resolver los hosts remotos que intentaban conectar. MySQL siempre que recibe una conexión remota vía IP intenta revisar a que nombre resuelve para posteriormente hacer el paso contrario y verificar/comparar que el host también resuelve a dicha IP original. El servidor no pasaba de aquí y generaba el cuello de botella.

Si queremos evitar que esto suceda una de dos, o nos aseguramos que los servidores DNS resuelven rápida y correctamente o deshabilitamos la resolución de nombres con –skip-name-resolve, en este caso únicamente podremos usar IPs y no hosts en la tabla de privilegios.

Salir de la versión móvil