Для установления соединения с 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 секунд.
Стоит отметить, что эта проблема возникает только с Windows 7 и после. До Windows 7 разрешение localhost обрабатывалось файлом hosts, который был предварительно настроен с 127.0.0.1
Как сказал Тони :
Я отредактировал Mysql my.ini, чтобы изменить службу mysql, чтобы привязываться только к адаптеру loopback IPV4.
[mysqld] ... bind=127.0.0.1
Другой вариант – отредактировать файл hosts, найденный под windows \ system32 \ drivers \ etc.
# localhost name resolution is handled within DNS itself. 127.0.0.1 localhost # ::1 localhost
Используйте редактор с правами администратора, чтобы раскомментировать 127.0.0.1.