Impossibile accedere in remoto al server MySQL in esecuzione su Mac OS X.


11

Ho un server MySQL in esecuzione sul mio computer di lavoro, che esegue Mac OS X Maverick. Voglio accedervi dal computer di casa, che ha anche Mac OS Maverick.

Dal terminale, se in 1 scheda, ho SSH nel mio computer di lavoro e ho lasciato che la sessione SSH rimanesse lì senza essere inattiva, quindi su un'altra scheda, posso accedere al server MySQL.

Tuttavia, senza la sessione SSH in esecuzione, otterrò il seguente errore

ERRORE 2003 (HY000): impossibile connettersi al server MySQL su "SERVER_IP_ADDRESS" (60)

Ho provato a modificare il my.cnffile sul server commentando bind-address o assegnandolo a 0.0.0.0ma non funziona.

Perché è così? Come posso configurare il server in modo che consenta l'accesso remoto senza dover eseguire ssh sul client? Qualcuno può aiutarmi per favore?


Ho lo stesso problema con PostGIS in esecuzione su OS X remoto ... può connettersi al database quando sshè aperto in una scheda, ma per il resto no. Penso che il problema sia che il processo del server di database è in pausa o non è in esecuzione quando non ho effettuato l'accesso al server remoto.
Andybega,

Risposte:


20

Ho sbattuto la testa contro questo errore oggi su OSX Yosemite con MySQL 5.7 recentemente aggiornato con Homebrew. Seguendo i suggerimenti su StackOverflow e altrove, ho cercato i my.cnffile specificati bind-address=0.0.0.0. Ho anche rimosso e reinstallato MySQL seguendo queste istruzioni e poi reinstallato usando brew install mysql. Ancora nessuna connessione remota consentita.

Solo quando ho eseguito ps -ax | grep mysqle notato che l'indirizzo di bind veniva passato nel comando di avvio (ignorando così tutti i my.cnffile), ho scavato un po 'di più e ho scoperto che Homebrew lega MySQL a 127.0.0.1 per impostazione predefinita .

Modifica di ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistcambiare --bind-address=127.0.0.1per --bind-address=0.0.0.0risolto il mio problema (quest'ultimo dovrebbe essere cambiato a un indirizzo IP specifico, se questo non è solo una macchina di sviluppo).

Penso che questa sia un'informazione vitale che mancava dalla maggior parte delle risorse che ho consultato, quindi spero che pubblicarla qui possa aiutare qualcun altro!

EDIT: Come indicato da LeandroCR nei commenti, l'esecuzione brew services restart mysqlsovrascriverà il file plist in LaunchAgents con quello predefinito, portando MySQL a rifiutare misteriosamente di nuovo le connessioni. Quindi un consiglio migliore di quello che ho scritto originariamente è il seguente:

  1. Modifica /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.pliste sostituisci --bind-address=127.0.0.1con bind-address=*o --bind-address=0.0.0.0( vedi documentazione MySQL su bind-address )
  2. Riavvia mysql usando brew services restart mysql

Quindi MySQL dovrebbe continuare ad accettare connessioni non locali da quel momento in poi - fino a quando non lo reinstallerai, presumibilmente.

Modifica (settembre 2019) Timothy Zorn sottolinea che questo problema non si verifica più per MySQL 8.x installato ed eseguito tramite Homebrew, quindi la mia risposta sopra, scritta nel 2016, potrebbe essere rilevante solo per 5.x.


3
Un altro consiglio: se stai eseguendo $ brew services riavvia mysql, pulirà ogni volta il file plist da LaunchAgents. Se vuoi insistere su quel cambiamento modifica /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Anche Emma grazie mille !!!
LeandroCR,

Ho installato mysql 5.6 usando brew install mysql56e ho cambiato i file ~/Library/LaunchAgents/homebrew.mxcl.mysql56.pliste /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Ma ancora quando lancio mysql mysql.server start, il comando ps mostra che bind-address=127.0.0.1. Ci sono altri file da modificare?
xi.lin,

@ xi.lin A quanto ho capito, mysql.server startignora LaunchAgent, quindi probabilmente ottiene le sue impostazioni da qualche altra parte. Per usare l'impostazione in plist, probabilmente devi usarebrew services restart mysql
Emma Burrows,

@EmmaBurrows Uso brew services restart mysqldell'output Successfully started mysql` (etichetta: homebrew.mxcl.mysql) `ma l'indirizzo è ancora 127.0.0.1 . In realtà non sono riuscito a trovare homebrew.mxcl.mysql.plistinvece di averehomebrew.mxcl.mysql56.plist
xi.lin

1
A partire da ora questo non è più come funziona. Il comando usato per eseguire mysqld_safeper me non ha bind_address. Invece è specificato in /usr/local/etc/my.cnf.
Timmmm,

6

In esecuzione ha locate my.cnftrovato il file/usr/local/etc/my.cnf

  1. Modifica quel file e impostalo bind-address = 0.0.0.0
  2. Riavvia mysql: brew services restart mysql

5

Spero che tu debba creare l'utente per l'accesso remoto con '%'caratteri jolly e concedere le autorizzazioni per i DB.

Passo 1:

In my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) commenta il tuo indirizzo di bind

# bind-address        = xxx.xxx.xxx.xxx

E riavvia MySQL Server.

Passo 2:

Quindi è necessario concedere le autorizzazioni all'utente per l'accesso remoto

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

Dai un'occhiata a Come abilitare la connessione remota.


Ho provato questa impostazione (commentando bind-address) prima e non ha funzionato. Ho creato un utente e ho concesso anche tutte le autorizzazioni. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
Chepukha,

Hai qualche firewall in atto? Se lo è, per favore disabilitalo.
Abdul Manaf,

Sì, posso accedere al server quando il firewall è disattivato. Ma posso configurare il firewall per consentire l'accesso remoto al server sql piuttosto che spegnerlo completamente? Sul server, nelle impostazioni del firewall, ho impostato mysqld su "consenti connessioni in entrata"
chepukha,

Hai SQL Server installato anche sulla stessa macchina?
Abdul Manaf,

Sì, certamente. Intendi SQL server e Firewall sullo stesso computer?
Chepukha,

0

Controlla iptables come iptables -L

Se il tuo IP non è presente, aggiungilo

In caso di Ubuntu ADD IP per consentire l'accesso:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
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.