首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL 連線完全指南:命令列 mysql、PHP mysqli_connect、連線參數詳解與關閉最佳實踐

     編輯:MySQL 入門

MySQL 連線完全指南:命令列 mysql、PHP mysqli_connect、連線參數詳解與關閉最佳實踐

連線是應用與 MySQL 交互的入口。無論是命令列交互、腳本自動化、Web 應用連線池,掌握連線參數、認證方式、SSL/壓縮選項、連線關閉機制,對穩定性、安全性、效能至關重要。本文系統講解命令列、PHP mysqli、PDO 三大連線方式,並深度解析參數與最佳實踐。

一、命令列:mysql 客戶端

[root@host]# mysql -u root -p
Enter password:******

常用參數

參數 說明 範例
-u, --user用戶名-u root
-p, --password密碼(不帶值會提示輸入,帶值如 -ppwd 無空格)-p 或 -psecret
-h, --host主機(預設 localhost)-h 192.168.1.100
-P, --port埠號(預設 3306)-P 3307
-D, --database預設資料庫-D RUNOOB
--protocol協議:TCP、SOCKET、PIPE、MEMORY--protocol=TCP
--ssl-modeSSL 模式:DISABLED、PREFERRED、REQUIRED、VERIFY_CA、VERIFY_IDENTITY--ssl-mode=REQUIRED
--compress啟用壓縮協議(低頻寬網路提升傳輸速度)--compress

登入成功後

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2854760
Server version: 8.0.36 MySQL Community Server

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> -- 現在可以執行任何 SQL
mysql> EXIT; -- 或 QUIT、\q 退出
Bye

二、PHP mysqli 連線

mysqli_connect() 參數詳解

$link = mysqli_connect(
    $host,      // 主機:'localhost'、'127.0.0.1'、'host:port'、'/path/to/socket'
    $user,      // 用戶名
    $passwd,    // 密碼
    $dbname,    // 預設資料庫(可選)
    $port,      // 埠號(可選,預設 3306)
    $socket     // Unix socket 路徑(可選)
);
  • 返回連線物件(mysqli)或 false。
  • new mysqli(...) 物件風格等價,推薦使用。
  • 預設非持久連線,腳本結束自動關閉。持久連線用 mysqli_pconnect() / p: 前綴,需謹慎管理連線池。

客戶端旗標(client_flags)

常數 作用
MYSQLI_CLIENT_SSL啟用 SSL 加密傳輸
MYSQLI_CLIENT_COMPRESS啟用壓縮協議
MYSQLI_CLIENT_IGNORE_SPACE允許函數名後有空格
MYSQLI_CLIENT_INTERACTIVE使用 interactive_timeout 而非 wait_timeout
MYSQLI_CLIENT_FOUND_ROWSUPDATE 返回匹配行數而非影響行數
$link = mysqli_connect($host, $user, $pass, $db, $port, $socket,
    MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_COMPRESS);

連線錯誤處理

$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
    error_log('MySQL Connect Failed: ' . $conn->connect_error);
    die('Database connection failed');
}
$conn->set_charset('utf8mb4'); -- 關鍵:設定連線字符集

三、PDO 連線(現代專案首選)

$dsn = 'mysql:host=localhost;port=3306;dbname=RUNOOB;charset=utf8mb4';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false, -- 使用原生預處理
    PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem', -- SSL 憑證
];
$pdo = new PDO($dsn, $user, $pass, $options);

四、連線關閉:mysqli_close() / PDO=null

  • 非持久連線:腳本結束自動關閉,通常無需顯式呼叫 mysqli_close()。
  • 持久連線:mysqli_close() 不會關閉持久連線(歸還池中)。
  • 顯式關閉場景:長時間運行腳本(CLI daemon)、釋放連線池槽位、預防「Too many connections」。
  • PDO:$pdo = null; 釋放連線。

五、連線池與效能最佳實踐

  1. Web 應用必用連線池:PHP-FPM + mysqli 持久連線(p:host)或 PDO 持久屬性,避免每請求建連開銷。
  2. 連線字符集統一 utf8mb4:SET NAMES utf8mb4 / DSN charset=utf8mb4 / $conn->set_charset('utf8mb4')。
  3. 生產環境強制 SSL:REQUIRED 模式,驗證 CA,防中間人攻擊。
  4. 監控關鍵指標:Threads_connected、Connection_errors_max_connections、Aborted_connects。
  5. 超時配置:wait_timeout=28800(8h)、interactive_timeout=28800、max_connections 按實際峰值+餘量設定。

常見連線錯誤排查

錯誤 原因 解決
Access denied for user用戶/密碼/主機不匹配核對 mysql.user、FLUSH PRIVILEGES、主機通配符 %
Can't connect to MySQL server服務未啟動/埠錯誤/防火牆/skip-networking檢查服務、netstat -ltnp、防火牆、bind-address
Too many connections達到 max_connections增大限制、修復連線洩漏、啟用連線池、檢查慢查詢堵塞
SSL connection error憑證過期/不匹配/CA 不信任更新憑證、檢查 ssl_ca/ssl_cert/ssl_key 路徑

連線是資料庫交互的生命線。掌握參數全景、選對驅動(PDO 優先)、強制 utf8mb4、生產環境上 SSL、連線池管理、監控告警,讓每一次握手都安全、高效、可觀測。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved