質問: ::1 ipv6を使用し、ループバックアダプターに制限したいと思っていました。 localhostのipv6を使用するwin7のデフォルトは::1であるため、127.0.0.1ではなく::1を使用しました。この構成では、netstatは次を報告します。c:\>netstat -an |findstr 3306 tcp 0.0.0.0:3306 0.0.0.0:0 listening tcp [::1]:3306 [::]:0 listening ipv4インターフェースで接続がブロックされているようですが、0.0.0.0ポート3306が開いているというnetstatのレポートを見ると不安になります。mysql documentation は以下を指定します: アドレスが「通常の」ipv4またはipv6アドレス(127.0.0.1または:: 1など)である場合、サーバーはそのipv4またはipv6アドレスに対してのみtcp/ip接続を受け入れます。 tcpviewはnetstatと同じ情報を私に与えました。 tdimonをシステムで動作させることができませんでした。mysqlが0.0.0.0をリッスンしないようにするにはどうすればよいですか?
回答: ようやくmysql 5.6ソースを掘り下げる時間ができました。 mysqld.ccの行2405はいくつかの回答を保持しているようです。 /* 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); } } このソケットオプションを設定すると、余分な行0.0.0.0:3306がnetstatに表示されます。ただし、127.0.0.1をtelnetに指定しても接続できません。コメントは、このオプションはワイルドカードが適用されている場合にのみ使用する必要があるように聞こえますが、bind-addressが指定されている場合でもオプションが適用されるようです。ここでおそらく関連する議論: http://serverdown.ttwait.com/que/486038 googleキャッシュ: http://webcache.googleusercontent.com/search?q=cache:14aq4-3trlsj:serverdown.ttwait.com/que/486038+&cd=4&hl=ja&ct=clnk&gl=us edit:バグレポート(トリアージ中)で、ワイルドカードアドレス*にバインドする場合、mysqlはipv6_v6onlyのみをクリアすることを提案しました。これにより、my.iniでの設定の柔軟性が最も高まるようです。一部の管理者が::をバインドしていて、127.0.0.1に接続している場合、驚くかもしれません。 *の代わりに::をバインドすると修正されます。