Como permitir conexão remota ao mysql

362

Instalei o MySQL Community Edition 5.5 na minha máquina local e desejo permitir conexões remotas para que eu possa conectar-me a partir de uma fonte externa.

Como eu posso fazer isso?

Leo
fonte
11
possível duplicado de Habilitar conexão remota MySQL
user
11
Se você usa o DigitalOcean, pode tentar usá-lo sudo mysql_secure_installation. PARA SUA INFORMAÇÃO.
Alan Dong
Não use formatação de código para texto que não seja código. Fora do assunto.
Marquês de Lorne
@EJP why? pergunta honesta por curiosidade
René Roth

Respostas:

776

Isso é permitido por padrão no MySQL.

O que está desativado por padrão é o rootacesso remoto . Se você deseja habilitar isso, execute este comando SQL localmente:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Em seguida, encontre a seguinte linha e comente-a em seu my.cnfarquivo, que geralmente vive /etc/mysql/my.cnfem sistemas Unix / OSX. Em alguns casos, o local para o arquivo é /etc/mysql/mysql.conf.d/mysqld.cnf).

Se for um sistema Windows, você pode encontrá-lo no diretório de instalação do MySQL, geralmente algo como C:\Program Files\MySQL\MySQL Server 5.5\ e o nome do arquivo será my.ini.

Alterar linha

 bind-address = 127.0.0.1

para

 #bind-address = 127.0.0.1

E reinicie o servidor MySQL ( Unix / OSX e Windows ) para que as alterações entrem em vigor.

mjuarez
fonte
4
Ok, então eu adicionei o binnd-address = 127.0.0.1 no final do arquivo e eu tentei conectar usando navicat de host externo e fico com 10060 erro
Leo
7
Hmm, você não precisa adicioná-lo. Como a minha resposta disse, você precisa comentar, não adicioná-lo. Há um em lá por padrão, então você precisa encontrar isso, e comente-a pré-fixando com #
mjuarez
7
Hmm, em \ MySQL Server 5.5 \ há apenas 1 ini chamado my-default.ini ea única linha sem o # é esta: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo
2
essa resposta funciona perfeita. thnx @mjuarez - CONCEDE TODOS OS PRIVILÉGIOS . PARA 'root' @ '%' IDENTIFICADO POR 'senha' COM OPÇÃO DE CONCESSÃO;
yadavr
66
Para aqueles que procuram o my.cnfarquivo e não encontrar uma bind-addressdirectiva nele, nota que no meu caso (MySQL versão 14.14 no Ubuntu 16.04.2) o local para o arquivo foi/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon
49

Depois de fazer tudo o que precede, eu ainda não conseguia entrar rootremotamente, mas o Telnetting to port 3306confirmou que MySQLestava aceitando conexões.

Comecei a olhar para os usuários no MySQL e notei que havia vários usuários root com senhas diferentes.

select user, host, password from mysql.user;

Então, MySQLeu defini todas as senhas para root novamente e finalmente consegui fazer logon remotamente como root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
Matthew Lock
fonte
4
Isto está correto. Enquanto segue as etapas de outras respostas, contas de usuário com senha vazia parecem criadas. Então você precisa adicionar senhas para eles.
Chhantyal
11
Eu precisava combinar a resposta aceita com esta e tudo funcionou corretamente.
James
8
SQL para 5.7 e acimaupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft 22/09
A resposta aceita define a senha e funcionou para mim.
MikeKulls
11
Obrigado, assim como @ James, eu tive que combinar isso com a resposta aceita para corrigir.
Ben Everard
39

Apenas uma observação da minha experiência, você pode encontrar o arquivo de configuração nesse caminho /etc/mysql/mysql.conf.d/mysqld.cnf.

(Eu lutei por algum tempo para encontrar esse caminho)

Mayur Patel
fonte
11
Isso depende muito da distribuição que você está usando. A melhor maneira é procurar:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny
Agradeço o comando 'find'. Eu sou novo na linha de comando, por isso é muito útil. Obrigado!
Heres2u
Eu lutei horas editando o /etc/mysq/conf.d/mysql.cnf até encontrar essa resposta.
Gayan Kavirathne 27/03
26

No meu caso, eu estava tentando conectar a um servidor mysql remoto no cent OS. Depois de passar por muitas soluções (concessão de todos os privilégios, remoção de ligações IP, ativação de rede), o problema ainda não estava sendo resolvido.

Como se viu, enquanto olhava para várias soluções, me deparei com iptables, o que me fez perceber que a porta 3306 do mysql não estava aceitando conexões.

Aqui está uma pequena nota sobre como eu verifiquei e resolvi esse problema.

  • Verificando se a porta está aceitando conexões:
telnet (ip do servidor mysql) [portNo]
  • Adicionando regra de tabela ip para permitir conexões na porta:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACEITAR
  • Não o recomendaria para o ambiente de produção, mas se suas tabelas de ip não estiverem configuradas corretamente, a adição de regras ainda poderá não resolver o problema. Nesse caso, deve ser feito o seguinte:
serviço iptables stop

Espero que isto ajude.

Kushal
fonte
17

Por favor, siga as etapas abaixo mencionadas para configurar o acesso remoto curinga para o Usuário MySQL.

(1) Abra cmd.

(2) navegue até o caminho C: \ Arquivos de programas \ MySQL \ MySQL Server 5.X \ bin e execute este comando.

mysql -u raiz -p

(3) Digite a senha root.

(4) Execute o seguinte comando para fornecer a permissão.

CONCEDE TODOS OS PRIVILEGIOS EM *. * PARA 'USERNAME' @ 'IP' IDENTIFICADO POR 'PASSWORD';

USERNAME: Nome de usuário que você deseja conectar ao servidor MySQL.

IP: Endereço IP público de onde você deseja permitir o acesso ao servidor MySQL.

SENHA: Senha do nome de usuário usado.

O IP pode ser substituído por% para permitir que o usuário se conecte a partir de qualquer endereço IP.

(5) Lave os privilégios seguindo o comando e saia.

PRIVILÉGIOS DE LAVAGEM;

Saída; ou \ q

insira a descrição da imagem aqui

Hiren Parghi
fonte
3
Depois de fazer isso, minha raiz ainda tem acesso negado. O que eu perdi?
teapeng
Você pode tentar com o endereço IP do sistema local em vez de% na quarta etapa. Deveria funcionar. % significa qualquer endereço IP.
Hiren Parghi
6

Se o processo do servidor MySQL estiver escutando apenas 127.0.0.1 ou :: 1, você não poderá se conectar remotamente. Se você tiver uma bind-addressconfiguração, /etc/my.cnfisso pode ser a fonte do problema.

Você também precisará adicionar privilégios para quem não é localhostusuário.

tadman
fonte
Estranho, como seu servidor poderia estar "ouvindo" outro IP além 127.0.0.1?
Pacerier 23/01
2
O @Pacerier 127.0.0.1 está vinculado apenas à interface de loopback. Conexões externas não funcionarão. Um sistema geralmente possui várias interfaces de rede, cada uma das quais precisa ser vinculada especificamente ou você pode usar o endereço 0.0.0.0 de ligação a todas.
tadman
6

Se você instalou o MySQL, brewele realmente escuta apenas na interface local por padrão. Para corrigir isso, você precisa editar /usr/local/etc/my.cnfe alterar o bind-addressde 127.0.0.1para *.

Então corra brew services restart mysql.

Timmmm
fonte
11
Para o meu servidor ubuntu 16.04.4, a configuração do endereço de ligação está em /etc/mysql/mysql.conf.d/mysqld.cnf #
Frank
Isso não é apenas usando o brew, qualquer MySQL terá essa configuração padrão, apenas para permitir conexões locais.
Nivs1978 18/02/19
6

Todo o processo para login remoto. O login remoto está desativado por padrão.Você precisa abri-lo manualmente para todos os ip..para acessar todos os ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Ip específico

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

então

flush privileges;

Você pode verificar o seu host e senha do usuário

SELECT host,user,authentication_string FROM mysql.user;

Agora seu dever é mudar isso

bind-address = 127.0.0.1

Você pode encontrar isso em

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

se você não encontrar isso lá, tente isso

sudo nano /etc/mysql/my.cnf

comentar neste

#bind-address = 127.0.0.1

Então reinicie o Mysql

sudo service mysql restart

Agora aproveite o login remoto

albus_severus
fonte
3

Apenas para sua informação, eu puxei meu cabelo com esse problema por horas .. finalmente, ligo para meu provedor de hospedagem e descobri que, no meu caso, usando um servidor em nuvem que, no painel de controle de 1 e 1, eles têm um firewall secundário que você precisa clonar e adicionar porta 3306. Uma vez adicionado, fui direto para a ..

Dan
fonte
Isso parece muito específico para sua situação. Não sou uma fonte infinita de conhecimento sobre redes, mas você tem certeza de que esta solução se aplica bem a esse problema?
Sandy Gifford
2
Eu também tive esse problema. Comum com servidores hospedados em nuvem,
Matthew Lock
2

Para quem precisa, verifique se a porta 3306 do firewall também está aberta, se o serviço de firewall estiver em execução.

Zelkovar
fonte
1

E para as pessoas do OS X, esteja ciente de que o parâmetro bind-address geralmente é definido no launchd plist e não no arquivo my.ini. Então, no meu caso, eu removi <string>--bind-address=127.0.0.1</string>a partir /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.

tdmartin102
fonte
Local alternativo para o arquivo plist:~/Library/LaunchAgents
Dylan Nissley
1

Se mysqldhouver um endereço de ligação definido como um loopback / endereço local (por exemplo 127.0.0.1), o servidor não poderá ser acessado a partir de hosts remotos, porque uma interface de loopback não pode ser alcançada a partir de nenhum host remoto.

Defina esta opção como 0.0.0.0( ::para IPv4 + 6) para aceitar conexões de qualquer host ou outro endereço acessível externamente, se você deseja permitir apenas conexões em uma interface.

Fonte

Wesley Smith
fonte
0

algumas vezes precisa usar o nome do pc no windows

primeiro passo) coloque no arquivo de configuração do mysql:

mysqld.cnf SET endereço de ligação = 0.0.0.0

(para permitir a renovação de conexões por tcp / ip)

segundo passo) criar usuário no mysql, tabela de usuários, com nome do pc nas propriedades do windows , NÃO ip

insira a descrição da imagem aqui

Rubén Ruíz
fonte
0

Habilitar o acesso remoto à raiz pode ser perigoso. Seria preferível que você configurasse contas de usuário com permissões mais restritivas. Os três passos a seguir devem fazer isso.

  1. Certifique-se de que a linha que começa com bind-address ...seja pelo menos comentada no seu arquivo my.ini ou my.cnf. Se não existir, siga em frente. Você pode encontrar este arquivo no C:\ProgramData\MySQL\MySQL Server 8.0Windows.

  2. Posteriormente, verifique se a conta de usuário com a qual você está estabelecendo a conexão não possui localhostno campo Correspondência de limite para hosts. Embora não seja recomendado, você pode colocá %-lo nesse campo para fins de teste. Você pode fazer isso abrindo uma conexão local ao servidor com o MySQL Workbench, depois indo para Servidor> Usuários e Privilégios na barra de menus e localizando a conta de usuário com a qual deseja se conectar.

O campo "Limitar à correspondência de hosts" é o que não permite a conexão não local. Ou seja, limita as conexões aceitas a um padrão de endereços IP. Idealmente, você deve acessar o servidor MySQL a partir de um endereço IP ou sub-rede estático, para poder ser o mais restritivo possível.

  1. Obviamente, seu firewall deve permitir que o aplicativo MySQL Server se comunique pela porta que você deseja. O equipamento de rede física entre você e seu servidor deve permitir a comunicação na porta com a qual você deseja se conectar. (porta 3306 normalmente)
Nikola Petrovic
fonte