Mysql localhost! = 127.0.0.1?

$ mysql -u root -h 127.0.0.1 -e 'show tables' created_from_host; +-----------------------------+ | Tables_in_created_from_host | +-----------------------------+ | test | +-----------------------------+ $ mysql -u root -h localhost -e 'show tables' created_from_host; ERROR 1049 (42000): Unknown database 'created_from_host' $ cat /etc/hosts 127.0.0.1 localhost.localdomain localhost 127.0.0.1 localhost ::1 localhost6.localdomain6 localhost6 

¿Como puede ser? Y la pregunta principal: ¿cómo otorgar TODOS los privilegios a TODAS las bases de datos de TODOS los hosts para la raíz?

UPD:

 $ mysql -u root -h 127.0.0.1 -pzenoss -e "show grants"; +----------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +----------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*3715D7F2B0C1D26D72357829DF94B81731174B8C' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +----------------------------------------------------------------------------------------------------------------------------------------+ $ mysql -u root -h localhost -pzenoss -e "show grants"; +----------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +----------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*3715D7F2B0C1D26D72357829DF94B81731174B8C' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +----------------------------------------------------------------------------------------------------------------------------------------+ 

UPD2:

 zends> SHOW GLOBAL VARIABLES LIKE 'skip_networking'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | skip_networking | OFF | +-----------------+-------+ 1 row in set (0.00 sec) zends> SELECT user,host FROM mysql.user WHERE user='root'; +------+-----------------------+ | user | host | +------+-----------------------+ | root | 127.0.0.1 | | root | ::1 | | root | localhost | | root | localhost.localdomain | +------+-----------------------+ 4 rows in set (0.00 sec) 

Como puede ver aquí , un mysqld de UNIX usa sockets si se usa sin un nombre de host o con el nombre de host localhost .

Entonces hace la diferencia, y en el sistema GRANT esta diferencia se hace evidente.

Inicie sesión a través de 127.0.0.1 y ejecute esta instrucción:

 SHOW GRANTS 

Probablemente verás algo así como

 GRANT ALL ... 'root'@'127.0.0.1' 

Acabo de confirmar en mi instalación local y parece que MySQL no resolverá automáticamente el nombre de host. Puede agregar otra concesión para localhost o simplemente usar 127.0.0.1

Sé que esta banda de rodamiento es antigua, sin embargo, probablemente no fue respondida correctamente.

De forma predeterminada, mysql realiza una resolución de nombre para que 127.0.0.1 y localhost se resuelvan de la misma manera. Sin embargo, puede desactivar la resolución de nombre en my.cnf:

skip-name-resolve = 1

Entonces localhost y 127.0.0.1 ya NO serán los mismos. Así que o bien conservas la resolución del nombre, o bien te limitas a usar solo el localhost en tus subvenciones o solo a 127.0.0.1 PERO: si haces este último, también tendrás que acceder a nuestra base de datos con esas credenciales.