2015-07-14 15 views
5

OS: Ubuntu 14.04 LTSCollegare MySQL tramite localhost non funziona, ma 127.0.0.1 sta lavorando

php controllo di versione: phpbrew versione

php: 5.5.10

I localizzato sul ping che ha risolto a 127.0.0.1.

Ciò indica che il file host (/ etc/hosts) è corretto.

127.0.0.1 localhost 

Ogni volta che provo connessione a MySQL utilizzando uno script php come quella qui sotto non funziona e mi dà l'errore: tale directory.

//connect to the database 
    mysql_connect("localhost","root","password") or die(mysql_error()); 

Tuttavia, quando mi collego via 127.0.0.1 che funzionerà

//connect to the database 
     mysql_connect("127.0.0.1","root","password") or die(mysql_error()); 

Inoltre, il mio phpMyAdmin non funziona quando si accede utilizzando "localhost" Ho dovuto cambiare il file da aggiungere 127,0. 0.1 opzione durante l'accesso.

Come posso utilizzare localhost per connettersi al database MySQL?

+0

** ** ATTENZIONE: Se si sta solo imparando PHP, per favore, non imparare l'obsoleto 'interfaccia mysql_query'. È terribile e viene rimosso nelle versioni future di PHP. Una sostituzione moderna come [PDO non è difficile da imparare] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/). Una guida come [PHP The Right Way] (http://www.phptherightway.com/) può aiutare a spiegare le migliori pratiche. Siate sempre assolutamente ** sicuri ** i vostri parametri utente sono [debuggati correttamente] (http://bobby-tables.com/php) o avrete gravi [bug di SQL injection] (http://bobby-tables.com/). – tadman

+0

concordato. Sto lavorando con il codice legacy e stavo semplicemente migrando un server. – JoeCodeCreations

risposta

1

La risposta a questo problema è stato che nel my.cnf situato all'interno

/etc/mysql/my.cnf 

la linea era o

bind-address = 127.0.0.1 

o

bind-address = localhost 

avrebbe dovuto essere

bind-address = 0.0.0.0 

che permetterà a tutte le connessioni

+4

newbies note! questa risposta aprirà il tuo sito agli aggressori. molto meglio per impostare la connessione 127.0.0.1 e richiedere agli utenti autorizzati di connettersi tramite ssh. – pgee70

+0

@ pgee70 totalmente d'accordo! Se lo fai, assicurati che la porta TCP 3306 sia proibita per l'accesso dall'esterno! –

2

In molti casi localhost è un suggerimento per utilizzare la presa UNIX per connettersi al processo server MySQL, dove 127.0.0.1 costringe una connessione TCP. A volte il socket UNIX si trova in una posizione inaspettata o semplicemente non è accessibile, il che risulta nell'errore "file non trovato".

Il socket è in genere qualcosa come /tmp/mysql.sock o potrebbe essere in qualche altro posto a seconda della distribuzione e quanto lo hai personalizzato.

Tenere presente che l'accesso tramite socket UNIX, che è locale al server per definizione, e TCP sono controllati da due regole diverse. localhost in un GRANT si riferisce al socket UNIX. % o un nome host specifico si riferisce al telecomando via TCP.

1

PHP sta ancora tentando di utilizzare la posizione di socket predefinita. Questo problema può comparire se hai spostato la cartella MariaDB/MySQL 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 

Attenzione, a seconda di quale driver si utilizza, potrebbe essere necessario specificare il pdo_mysql.default_socket =!

Al fine di verificare la directory corrente eseguire il seguente comando in MySQL:

select @@datadir; 
+0

Questo ha risolto il mio problema, per trovare quale file socket si sta usando mysql, ho eseguito 'mysqladmin variables | comando grep socket' che puntava a '/ tmp/mysql.sock'. (OS X Sierra) – kubilay

Problemi correlati