Não é possível acessar remotamente o servidor MySQL em execução no Mac OS X

11

Eu tenho um servidor MySQL em execução no meu computador de trabalho, que executa o Mac OS X Maverick. Quero acessá-lo no computador doméstico, que também possui o Mac OS Maverick.

Do terminal, se em uma guia, eu ssh no meu computador de trabalho e deixo a sessão ssh lá sem ficar ociosa, em outra guia, posso acessar o servidor MySQL.

No entanto, sem a sessão ssh em execução, receberei o seguinte erro

ERRO 2003 (HY000): Não é possível conectar ao servidor MySQL em 'SERVER_IP_ADDRESS' (60)

Tentei modificar o my.cnfarquivo no servidor comentando o endereço de ligação ou atribuindo-o, 0.0.0.0mas não funciona.

Por que é assim? Como posso configurar o servidor para permitir acesso remoto sem precisar executar o ssh no cliente? Alguém pode ajudar por favor?

chepukha
fonte
Eu tenho o mesmo problema com o PostGIS em execução no OS X remoto ... pode conectar-se ao banco de dados quando sshé aberto em uma guia, mas caso contrário não. Acho que o problema é que o processo do servidor de banco de dados está em pausa ou não está sendo executado quando não estou conectado ao servidor remoto.
andybega

Respostas:

20

Eu tenho batido minha cabeça contra esse erro hoje no OSX Yosemite com o MySQL 5.7 recentemente atualizado com o Homebrew. Seguindo as sugestões no StackOverflow e em outros lugares, procurei os my.cnfarquivos especificados bind-address=0.0.0.0. Até removi e reinstalei o MySQL seguindo estas instruções e depois reinstalei usando brew install mysql. Ainda não são permitidas conexões remotas.

Não foi até que eu corri ps -ax | grep mysqle notei que o endereço de ligação estava sendo passado no comando de inicialização (substituindo todos os my.cnfarquivos) que eu pesquisei mais um pouco e descobri que o Homebrew vincula o MySQL ao 127.0.0.1 por padrão .

Editar ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistpara alterar --bind-address=127.0.0.1para --bind-address=0.0.0.0resolver meu problema (o último deve ser alterado para um endereço IP específico, se não for apenas uma máquina de desenvolvimento).

Eu sinto que esta é uma informação vital que estava faltando na maioria dos recursos que consultei. Espero que a publicação aqui aqui ajude outra pessoa!

EDIT: Como o LeandroCR indicou nos comentários, a execução brew services restart mysqlsubstituirá o arquivo plist no LaunchAgents pelo padrão, levando o MySQL a recusar misteriosamente as conexões novamente. Portanto, conselhos melhores do que o que escrevi originalmente são os seguintes:

  1. Edite /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.pliste substitua --bind-address=127.0.0.1por bind-address=*ou --bind-address=0.0.0.0( consulte a documentação do MySQL no endereço de ligação )
  2. Reinicie o mysql usando brew services restart mysql

Então, o MySQL deve continuar a aceitar conexões não locais a partir de então - até que você o reinstale, provavelmente.

Editar (Set 2019) Timothy Zorn salienta que este problema não ocorre para MySQL 8.x instalado e executado através de Homebrew, então minha resposta acima, escrito em 2016, só pode ser relevante para 5.x.

Emma Burrows
fonte
3
Outra dica: Se você estiver executando o $ brew services, reinicie o mysql, ele limpará o arquivo plist do LaunchAgents todas as vezes. Se você deseja persistir nessa alteração, edite /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Emma também agradece muito !!!
LeandroCR
Instalei o mysql 5.6 usando brew install mysql56e alterei os arquivos ~/Library/LaunchAgents/homebrew.mxcl.mysql56.pliste /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Mas ainda quando inicio o mysql mysql.server start, o comando ps mostra que o bind-address=127.0.0.1. Existem outros arquivos para editar?
Xi.lin 5/11
@ xi.lin Pelo que entendi, mysql.server startignora o LaunchAgent, por isso provavelmente obtém sua configuração de outro lugar. Para usar a configuração no plist, você provavelmente terá que usarbrew services restart mysql
Emma Burrows
@EmmaBurrows Usando a brew services restart mysqlsaída Successfully started mysql` (label: homebrew.mxcl.mysql) `mas ainda assim o endereço é 127.0.0.1 . Na verdade eu não puderam encontrar homebrew.mxcl.mysql.plistem vez de terhomebrew.mxcl.mysql56.plist
xi.lin
11
A partir de agora, não é mais assim que funciona. O comando usado para executar mysqld_safepara mim não tem bind_address. Em vez disso, é especificado em /usr/local/etc/my.cnf.
Timmmm
6

Em execução locate my.cnfencontrou o arquivo/usr/local/etc/my.cnf

  1. Edite esse arquivo e defina bind-address = 0.0.0.0
  2. Reinicie o mysql: brew services restart mysql
Pablo Díaz Ogni
fonte
5

Espero que você precise criar o usuário para acesso remoto com '%'curinga e conceder permissões nos bancos de dados.

Passo 1:

Em my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) comente seu endereço de ligação

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

E reinicie o MySQL Server.

Passo 2:

Então você precisa conceder permissões ao usuário para acesso remoto

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

Por favor, dê uma olhada em Como habilitar a conexão remota.

Abdul Manaf
fonte
Eu tentei essa configuração (comentando o endereço de ligação) antes e não funcionou. Eu criei um usuário e concedeu toda a permissão também. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha
Você tem algum firewall instalado? Se for, desative isso.
Abdul Manaf
Sim, eu posso acessar o servidor quando o firewall está desativado. Mas posso configurar o firewall para permitir acesso remoto ao servidor sql em vez de desativá-lo completamente? No servidor, em configurações de firewall, eu configurei mysqld para "permitir conexões de entrada"
chepukha
Você possui o SQL Server também instalado na mesma máquina?
Abdul Manaf
Sim eu quero. Você quer dizer SQL Server e Firewall na mesma máquina?
chepukha
0

Verifique iptables como iptables -L

Se o seu IP não estiver presente, adicione-o

No caso do Ubuntu ADD IP para permitir o acesso:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Priyanka Kariya
fonte