Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso mapear um soquete unix local para um soquete inet?


Inverta a ordem de seus argumentos para socat , e funciona.
socat -v tcp-l:6666,reuseaddr,fork unix:/var/lib/mysql/mysql.sock

Isso instrui socat para
  1. Ouvir na porta TCP 6666 (com SO_REUSEADDR )
  2. Aguarde para aceitar uma conexão
  3. Quando uma conexão é feita, bifurca. Na criança, continue as etapas abaixo. No pai, vá para 2.
  4. Abra uma conexão de domínio UNIX para /var/lib/mysql/mysql.sock soquete.
  5. Transfira dados entre os dois endpoints e saia.

Escrevendo ao contrário
socat -v unix:/var/lib/mysql/mysql.sock tcp-l:6666,reuseaddr,fork

não funciona, porque isso instrui socat para
  1. Abra uma conexão de domínio UNIX para /var/lib/mysql/mysql.sock soquete.
  2. Ouvir na porta TCP 6666 (com SO_REUSEADDR )
  3. Aguarde para aceitar uma conexão
  4. Quando uma conexão é feita, gere um filho trabalhador para transferir dados entre os dois endereços.
  5. O pai continua a aceitar conexões no segundo endereço, mas não tem mais o primeiro endereço disponível:foi dado ao primeiro filho. Portanto, nada de útil pode ser feito a partir deste ponto.