ローカルシステムがMySQLi接続を確立するのに約1秒かかります。コード:
$db = new mysqli( 'localhost', 'root', 'pass', 'mydb' );
なんでこんなに遅いの?これは正常ですか?改善できますか?
「localhost」を127.0.0.1に切り替えます。
したがって、代わりに:
$db = new mysqli( 'localhost', 'root', 'pass', 'mydb');
使用する:
$db = new mysqli( '127.0.0.1', 'root', 'pass', 'mydb');
この質問はかなり人気があるようで、多くの人がなぜこれが起こっているのか知りたがっています。
これは、MySQLクライアントがホスト名のIPV6ルックアップを実行するために発生します。これが失敗した場合(この場合は明らかに失敗します)、IPV4ルックアップを実行しようとします。IPV6(AAAA)ルックアップが失敗してからIPV4(A)ルックアップが成功するまでの間に、約1〜2秒続く接続タイムアウトサイクルが発生します。
この問題はWindows7以降でのみ発生するようです。Windows 7より前は、ローカルホストの解決は、次のように事前構成されたhostsファイルによって処理されていました。127.0.0.1
Mysql my.iniを編集して、IPv4ループバックアダプターにのみバインドするようにmysqlサービスを変更しました。
[mysqld] ... bind=127.0.0.1
もう1つのオプションは、windows \ system32 \ drivers\etcの下にあるhostsファイルを編集することです。
# localhost name resolution is handled within DNS itself.
127.0.0.1 localhost
# ::1 localhost
管理者権限を持つエディターを使用して、127.0.0.1のコメントを解除します。