Non riesci a connetterti a MySQL usando 'localhost' ma usando '127.0.0.1' va bene?


12

Il mio file / etc / hosts è simile al seguente:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Durante la creazione del server ho scoperto che, sebbene potessi eseguire correttamente il ping di localhost, in alcuni file di configurazione per servizi come Postfix e Apache e Dovecot, dovevo specificare 127.0.0.1invece di localhostfarlo funzionare.

Avevo anche bisogno di cambiare i file di configurazione di alcuni siti web basati su database, che erano soliti localhostconnettersi a MySQL.

Ho provato varie modifiche al hostsfile, ma nulla che ho provato finora ha aiutato.

Il server esegue Ubuntu 12.04.02 LTS. Non ha installato selinux e la situazione di cui sopra rimane anche dopo aver impostato i criteri predefiniti di IPtables per accettarli e scaricarli.

Risposte:


15

Una cosa che potresti controllare è (che richiede di accedere alla console MySQL): verifica di disporre delle autorizzazioni per accedere roottramite localhost.

mysql -h 127.0.0.1 -u root -p

- Una volta effettuato l'accesso correttamente -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Basta lanciarlo là fuori, nel caso in cui questo sia il problema.


Ho la sensazione che tu sia sulla buona strada. L'ho fatto e posso vedere che sebbene root e un paio di altri utenti siano stati creati per localhost, quelli creati dal pannello di controllo di hosting per gli utenti sono tutti 127.0.0.1(tranne uno che lo è %). Penso che questo probabilmente rivelerà abbastanza per me per risolverlo, quindi accetterò probabilmente la tua risposta tra poco.
Peter Snow,

grazie per l'aiuto! vorrei aggiungere che è necessario riavviare il server mysql dopo aver aggiornato la tabella mysql.user per rendere effettive le modifiche.
lackovic10

Sebbene accettato, questo non è di solito (mai?) Il problema, per mysql. Vedi la risposta di EEAA invece (interpreta mysql localhostcome socketinvece TCP).
ToolmakerSteve

8

La maggior parte dei client MySQL è strana nel fatto che se si specifica l'host come localhost, lo aliasano a una connessione socket anziché a una connessione TCP. Le tue opzioni sono di attenersi 127.0.0.1o, se il client lo supporta (come fa il binario della CLI mysql con il --protocolflag), forzarlo a usare TCP invece di un socket unix.


Grazie EEAA. Il problema è che cose come l'installazione di Joomla falliscono. Se durante l'installazione si specifica 127.0.0.1invece che localhostnel campo nome host, i percorsi di installazione verranno incasinati dandomi altri errori, ma specificando localhost non riesce a connettere il database! Cosa ha causato questa situazione? Perché ce l'ho?
Peter Snow,

3
@PeterSnow Imposta un socket di dominio Unix nella tua configurazione MySQL.
Michael Hampton

Grazie @MichaelHampton Ho cercato per l'ultima mezz'ora e non riesco a trovare come impostare questo. Potete indicarmi un articolo o darmi qualche idea per favore? Ho socket = /var/run/mysqld/mysqld.sockdentro my.cnfe il file esiste, di proprietà di mysql con permessi 777. Grazie.
Peter Snow,

@PeterSnow Hai riavviato mysqld dopo aver apportato quella modifica?
SEE

Attualmente sto cercando di usarlo tramite lo script di installazione di Joomla. La pagina http richiede il nome host. Se scelgo 127.0.0.1che funziona (ma lo script usa la voce in un secondo momento e fallisce perché si aspetta un nome risolvibile come localhost), ma se uso localhost, connettendomi, per creare il database, fallisce.
Peter Snow,


1

Puoi controllare l'autorizzazione in questo modo:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Se questo è in ascolto su 0 0.0.0.0:* significa che tutti possono accedere a quel mysql.

è possibile modificare l'associazione per questo nel file my.conf. Nel percorso predefinito di Linux per questo è:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Aggiungi queste righe nel file my.conf per consentire l'ip che desideri.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0

Grazie a_learner, per l'informazione, anche se ho già accettato una risposta.
Peter Snow,

0

PHP sta ancora cercando di utilizzare la posizione predefinita del socket. Questo problema può apparire se la cartella MariaDB / MySQL è stata spostata da / var / lib / mysql in un'altra posizione. Per risolvere il problema devi definire la posizione del nuovo socket nel file /etc/php.ini .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

0

Ho risolto questo problema creando link simbolico, sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Ma prima devo creare una cartella /var/run/mysqld/perché la cartella non esisteva inizialmente.


-1

È necessario un mysql.sock in / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

dovrebbe funzionare bene dopo quello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.