2011-12-11 16 views
5

Quando sono in ufficio, MySQL gira su un server specifico chiamato "mysqldev". Nel mio file /etc/hosts ho impostato "mysqldev" in modo che corrisponda all'IP di questo server. Fin qui tutto bene. Tuttavia, quando sono fuori ufficio usando il mio portatile, voglio usare il mio database MySQL locale, poiché clonerò database specifici lì e non ho internet per connettermi al database dell'ufficio. Non voglio cambiare i miei script, ma piuttosto la mia configurazione del laptop. Quindi sul mio portatile ho posto in /etc/hosts:Utilizzo di un alias per il server localhost in MySQL

127.0.0.1 localhost mysqldev

Tuttavia, per qualche motivo questo non funziona come previsto. Se accedo a MySQL usando il server su localhost, tutto bene. Ma quando provo ad entrare in sul server mysqldev (stesso IP localhost), ottengo l'errore:

Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] Connection refused (trying to connect via tcp://mysqldev:3306)

(questo è utilizzando PHP, ma utilizzando la riga di comando è lo stesso errore)

Gli utenti che sono impostati sul sistema hanno permessi speciali per il login su questo server:

CREATE USER 'test'@'mysqldev' IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'mysqldev';

Ho anche spento il firewall per testare, e non fa differenza. Cosa potrebbe essere?

risposta

6

La libreria client MySQL tenta di indovinare come connettersi al proprio database. Quando si dà localhost come il nome host, si presuppone, che si sta utilizzando un socket locale (la ricerca sul computer un file chiamato mysql.sock, probabilmente sotto /var/lib/mysql o /usr/local/mysql/.

Tuttavia, quando si utilizza niente altra cosa, come un indirizzo IP, un nome host diverso o, nel tuo caso, mysqldev, tenta di connettersi all'host tramite tcp. Dal messaggio di errore, sembra che il tuo server mysql locale non stia ascoltando sulla porta tcp 3306 (il mysql impostazione predefinita)

Controllare, se il proprio my.cnf (probabilmente /etc/my.cnf o /etc/mysql/my.cnf) consente l'utilizzo di tcp. Se si trova una riga come

skip-networking 

commento fuori:

#skip-networking 

e riavviare il server. Quindi riprova a connetterti.


Per scoprire, dove la vostra presa è, connettersi tramite localhost ed emettere il seguente comando:

mysql> show global variables like '%socket%'; 
+---------------+-----------------------------+ 
| Variable_name | Value      | 
+---------------+-----------------------------+ 
| socket  | /var/run/mysqld/mysqld.sock | 
+---------------+-----------------------------+ 
+0

Ecco, grazie! –

0

Se si sta utilizzando MAMP Pro e si esegue in problemi, semplice è possibile deselezionare la casella etichettato "Consenti solo l'accesso locale" all'interno delle impostazioni di MySQL Server.

Problemi correlati