bind-address = :: 1 # no entanto, o netstat mostra 0.0.0.0:3306 LISTENING

6

Estou executando o MySQL 5.6 no Windows 7 de 64 bits com IPv6 e IPv4 ativados.

No my.ini:

port=3306
bind-address = ::1

Eu esperava usar o IPv6 e restringir o adaptador de loopback. Eu usei ::1 em vez de 127.0.0.1 porque win7 com IPv6 assume como padrão ::1 para localhost .

Com esta configuração, o netstat relata o seguinte:

C:\>netstat -an |findstr 3306
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING
  TCP    [::1]:3306             [::]:0                 LISTENING

Parece que as conexões podem estar sendo bloqueadas na interface IPv4, mas ver o relatório do netstat que 0.0.0.0 port 3306 está aberto me deixa desconfortável.

A documentação do MySQL especifica:

If the address is a “regular” IPv4 or IPv6 address (such as 127.0.0.1 or ::1), the server accepts TCP/IP connections only for that IPv4 or IPv6 address.

O TCPView me forneceu as mesmas informações que o netstat. Eu não consegui fazer o TDIMon funcionar no meu sistema.

Como posso evitar que o mysql ouça em 0.0.0.0 ?

    
por ebyrob 17.03.2014 / 20:01

4 respostas

4

Eu vejo duas possibilidades aqui:

  1. Na verdade, você tem duas cópias do MySQL em execução, uma das quais ligada ao IPv4 e a outra ligada ao IPv6. Isso provavelmente não é muito provável, mas é algo que você deve verificar de qualquer maneira.

  2. Você encontrou um bug na porta do Windows do MySQL. Quando tentei isso no Linux, bind-address = ::1 fez com que o MySQL ligasse apenas a ::1 e não a qualquer endereço IPv4. Neste caso, você deve reportar isso como um bug para o MySQL.

por 20.03.2014 / 01:00
1

Eu finalmente tive tempo de cavar a fonte do mysql 5.6. A linha 2405 do mysqld.cc parece conter algumas respostas.

 /*
   For interoperability with older clients, IPv6 socket should
   listen on both IPv6 and IPv4 wildcard addresses.
   Turn off IPV6_V6ONLY option.

   NOTE: this will work starting from Windows Vista only.
   On Windows XP dual stack is not available, so it will not
   listen on the corresponding IPv4-address.
 */
if (a->ai_family == AF_INET6)
{
  arg= 0;

  if (mysql_socket_setsockopt(ip_sock, IPPROTO_IPV6, IPV6_V6ONLY,/* Line: 2405 */
                              (char *) &arg, sizeof (arg)))
  {
    sql_print_warning("Failed to reset IPV6_V6ONLY flag (error: %d). "
                      "The server will listen to IPv6 addresses only.",
                      (int) socket_errno);
  }
}

Configurar essa opção de soquete faz com que a linha extra 0.0.0.0:3306 apareça em netstat . No entanto, ainda não consigo me conectar especificando 127.0.0.1 para telnet.

Os comentários fazem parecer que esta opção só deve ser usada quando um caractere curinga é aplicado, mas parece que a opção é aplicada mesmo quando bind-address é especificado.

Discussão possivelmente relacionada aqui: link

cache do google: link

EDIT: No relatório de erros (que ainda está em triagem), propus que o MySQL limpe apenas IPV6_V6ONLY ao vincular ao endereço curinga * . Isso parece dar a maior flexibilidade de configuração no my.ini. Se alguns administradores estiverem ligando :: e se conectando a 127.0.0.1 , eles poderão se surpreender. Vincular * em vez de :: iria consertá-lo.

    
por 24.03.2014 / 20:19
-1

0.0.0.0:3306 significa que o MySQL está escutando em todos os adaptadores / endereços para IPv4. Eu colocaria as seguintes linhas em my.cnf:

bind-address = 127.0.0.1
bind-address = ::1

Isso deve restringir o acesso IPv4 ao host local; não importa qual versão o Windows padroniza, você ainda poderá se conectar a ele. Se isso não resolver, provavelmente você terá bind-address definido em outro arquivo em algum lugar.

Além disso, certifique-se de que o mysql esteja realmente parado quando você reiniciá-lo; pode simplesmente ser que uma instância antiga ainda esteja em execução e esteja ouvindo 0.0.0.0 .

EDITAR

Veja a seção Documentação do MySQL 4.2.3.3 Usando arquivos de opções para outros arquivos que o parâmetro bind-address pode ser especificado em.

    
por 19.03.2014 / 21:29
-1

A solução está no arquivo conf .Tente remover todas as opções -I ou --interface de /etc/default/ntp e insira o seguinte no seu /etc/ntp.conf :

interface ignore wildcard
interface listen 127.0.0.1
  • Sem interface, ignore o caractere curinga O NTP também escutará em 0.0.0.0

  • Sem interface, ouça o NTP só ouvirá em 127.0.0.1 (é claro)

Se você já tem essa linha:

0.0.0.0:3306

depois é só comentar para

# 0.0.0.0:3306

** Em segundo lugar, tente alterar a linha seguinte em my.ini

 bind-address = ::1

para

 bind-address = 127.0.0.1

EDITAR:

se você estiver usando o windows7 de 64 bits,

você tem que ir para esse arquivo aqui:

 C:\WINDOWS\system32\drivers\etc\hosts

Localhost deve ser a primeira entrada nesse arquivo. Esse arquivo de hosts pode ter: 1 para localhost. Para corrigir isso, adicione (ou descomente) a linha:

   127.0.0.1       localhost

e comente essa linha:

   ::1             localhost 

para

   # ::1             localhost

e, em seguida, você pode se conectar via host local.

    
por 23.03.2014 / 10:54