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
Comment pourrait-il être? Et la question principale - comment accorder TOUS les privilèges sur TOUTES les bases de données à partir de TOUS les hôtes de la racine?
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)
- ce que vous obtenez à partir de $ ping localhost ?
- 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.029 ms
- alors le problème est probablement avec vos subventions. Vous devez accorder des privilèges de 'root'@'localhost' ou quelque chose comme ça
- Je ne suis pas sûr de ce que vous êtes en train de demander, mais oui, mysql traite localhost et 127.0.0.1 différemment. localhost s'applique aux connexions à partir de l'hôte local sur un mécanisme IPC, comme les sockets de domaine unix. 127.0.0.1 s'applique aux connexions TCP/IP de l'hôte local. La même chose se produira lorsque vous exécutez la ligne de commande mysql, -h localhost utilise une socket unix pour se connecter, -h 127.0.0.1 utilise le protocole TCP/IP. Il pourrait faire de vous connecter aux différents serveurs mysql cas, trop..
Vous devez vous connecter pour publier un commentaire.
Comme vous pouvez le voir ici, un UNIX mysqld utilise des sockets si elle est utilisée sans un nom d'hôte ou le nom d'hôte
localhost
.Si cela fait une différence, et dans le système de SUBVENTION à cette différence devient évidente.
Je sais que cette bande de roulement est vieux, mais il a probablement pas répondu correctement.
Par défaut, mysql n'est un nom de résoudre de manière 127.0.0.1 et localhost va résoudre le même. Toutefois, vous pouvez changer la résolution de nom dans ma.cnf:
skip-name-resolve = 1
Puis localhost et 127.0.0.1 sera PAS être plus le même. Donc, soit vous conservez la résolution de nom, ou vous limiter uniquement à l'aide de localhost dans vos subventions ou seulement 127.0.0.1
MAIS: Si vous ne l'-ci, vous aurez accès à notre base de données avec les informations d'identification ainsi.
De vous connecter avec l'adresse 127.0.0.1 et l'exécution de cette instruction:
Vous verrez probablement quelque chose comme
Je vient de confirmer sur mon installation locale et il semble que MySQL ne sera pas auto-résoudre le nom d'hôte. Vous pouvez soit ajouter une autre subvention pour
localhost
ou tout simplement utiliser 127.0.0.1Cela a causé des problèmes dans la mise en place d'un local en environnement de dev sur MacOS.
Plusieurs fonctions de script, dire
mysqli_connect()
en php peut utiliserlocalhost
pour se connecter à MySQL: Vous ne pouvez pas (ne devrait pas) aller sur le remplacement delocalhost
avec127.0.0.1
dans chaque script.Essayé de fixation par l'ajout de
bind-address=localhost
,socket=/var/mysql/mysql.sock
,socket=/tmp/mysql.sock
etc. de la de mes.cnf de fichier, mais cela ne fonctionne pas.Pour résoudre le problème (sous MacOS), note que la
mysql.default_socket
paramètre dans/etc/php.ini
fichier de points à/var/mysql/mysql.sock
, alors que MySQL est default_socket est/tmp/mysql.sock
.Donc, soit modifier votre
php.ini
fichier ou créer un softlink à MySQL default_socket:P. S - 127.0.0.1 est traitée comme une connexion TCP et localhost unix socket de connexion MySQL: détails ici.