Este error sucede por la seguridad de MySQL / MariaDB que impide que el host donde estamos no pueda conectarse al servidor al no estar en la lista de Host permitidos.

Para solucionarlo podemos usar distintos métodos, pero ten en cuenta que es mejor solo permitir los Host conocidos a menos que estemos en un entorno de desarrollo.

Este error también esta sucediendo porque si tienes 127.0.0.1 pero el servidor te detecta como localhost, que aunque viene a ser lo mismo no llega a permitir las conexiones.

 mysqli_real_connect(): (HY000/1130): Host 'localhost' is not allowed to connect to this MariaDB server
 
mysql -u root
ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to this MariaDB server

Antes de Empezar:

  • Las primeras 2 soluciones son teniendo en cuenta que la cuenta de root no esta afectada por este problema y podemos loguearnos normal, en caso de que no puedas loguearte vamos a tener que resetear la cuenta con estos pasos: (link pronto)
  • Este problema suele suceder normalmente cuando la tabla de usuarios esta corrupta, para poder comprobar que este no sea nuestro caso deberás de ejecutar lo siguiente en la consola y en caso veas el siguiente mensaje deberás seguir mi otro tutorial.
shell> mysql

MariaDB>  SELECT * FROM mysql.user;
ERROR 1194 (HY000): Table 'user' is marked as crashed and should be repaired

https://www.vicolinker.net/error-1194-table-marked-crashed-should-repaired/

Solución 1: Asignar privilegios

Vamos a agregar los privilegios al usuario root con la IP local.

shell> mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1'; # localhost/ip que queremos
mysql> FLUSH PRIVILEGES;
mysql> exit

Nota: También puedes usar '%' como nombre de host para permitir cualquiera, pero esto podría ser un problema de seguridad porque podrían incluso atacar al MySQL si lo tienes publico.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

Solución 2: Crear un usuario Extra

En este caso vamos a crear un usuario extra para conectarnos desde este host, donde pone localhost debes poner host donde estas o la IP.

shell> mysql -u root -p

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

mysql> exit

Solución 3: skip-grant-tables  (Sin tener el root)

Vamos a usar la opción "skip-grant-tables" para omitir los privilegios del Servidor MySQL, esto te permitirá loguearte desde cualquier host y sin contraseña alguna.

Atención: No uses esto en producción porque seria un gran problema de seguridad, en algunos casos me parece que esto se desactiva después de 5 o 10 minutos automáticamente.

Editamos el archivo my.ini y agregamos la siguiente linea debajo de [mysqld] quedando similar a esto:

[mysqld]
skip-grant-tables
.
.
.

Reiniciamos el servidor MySQL y ya podremos conectarnos.