$start = microtime(true);
$mysqli = new mysqli('127.0.0.1', 'root', '', 'mysql'); // 0.0025 秒
// $mysqli = new mysqli('localhost', 'root', '', 'mysql'); // 超過 1 秒,慢 400 倍
echo microtime(true) - $start;
my.ini 設定 bind-address=127.0.0.1(僅綁 IPv4 回環)localhost 解析為 ::1(IPv6 回環)| bind-address 設定 | localhost 連線 | 127.0.0.1 連線 |
|---|---|---|
127.0.0.1 | 慢(IPv6 失敗回退) | 快(直接 IPv4) |
::1 | 快(直接 IPv6) | 慢(IPv4 失敗回退) |
| 註解/移除 | 快(雙協定皆聽) | 快 |
$mysqli = new mysqli('127.0.0.1', 'user', 'pass', 'db');
$pdo = new PDO('mysql:host=127.0.0.1;dbname=db', 'user', 'pass');
WordPress、phpMyAdmin 等安裝時預設 localhost,請手動改為 127.0.0.1。
# my.ini [mysqld] bind-address = :: # 監聽所有 IPv6 介面(含 ::1) # 或 bind-address = 0.0.0.0 # 監聽所有 IPv4 介面(含 127.0.0.1) # 或干脆註解掉 bind-address,預設監聽所有介面
重啟 MySQL 服務生效。
# C:\Windows\System32\drivers\etc\hosts 127.0.0.1 localhost # 註解掉 ::1 localhost
Windows 7、Windows Server 2008 R2、Windows Server 2012 及更新版本均存在此行為差異。
# 測試解析 ping localhost ping 127.0.0.1 # 測試 MySQL 連線 mysql -h 127.0.0.1 -u root -p mysql -h localhost -u root -p