Base de datos

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

La conexión local falla mientras que por TCP a 127.0.0.1 puede funcionar. El error 2 significa que el fichero de socket no existe.

Conectar a «localhost» usa el socket Unix; conectar a «127.0.0.1» usa TCP. Son caminos distintos y fallan por motivos distintos, lo que explica que uno funcione y el otro no.

Qué comprobar, y en qué orden

En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.

  1. 1

    El servidor no está corriendo, así que el socket no existe.

    Comprobar

    sudo systemctl status mariadb || sudo systemctl status mysql

    Corregir

    sudo systemctl start mariadb
  2. 2

    El socket está en otra ruta y el cliente busca donde no es.

    Comprobar

    sudo ss -xl | grep mysql
    mysql_config --socket 2>/dev/null

    Corregir

    mysql --socket=/run/mysqld/mysqld.sock -u usuario -p
    # Para fijarlo, socket= en la sección [client] de /etc/mysql/my.cnf
  3. 3

    El servidor no arrancó, normalmente por disco lleno o por un fallo al recuperar el journal de InnoDB.

    Comprobar

    sudo journalctl -u mariadb -n 50 --no-pager
    df -h /var/lib/mysql

    Corregir

    # Resolver lo que indique el journal antes de reintentar el arranque.
  4. 4

    El directorio de datos tiene el propietario equivocado tras una restauración o una copia con sudo.

    Comprobar

    ls -ld /var/lib/mysql

    Corregir

    sudo chown -R mysql:mysql /var/lib/mysql

Los comandos de esta página se ejecutan en tu servidor y algunos modifican la configuración: léelos antes de pegarlos. Las rutas y los nombres de servicio varían entre distribuciones. Así se elabora este catálogo.