数据库连接是客户端与 MySQL 服务器间有状态、有生命周期的通信通道,涉及 TCP/Unix Socket 建连、认证授权、线程分配及会话初始化;支持 Unix Socket、TCP/IP、TLS/SSL 等协议;关键配置含 max_connections、wait_timeout 等;PHP 常用 mysqli 和 PDO 方式建立连接。

数据库连接,就是客户端程序和 MySQL 服务器之间建立的一条通信通道,用来发送 SQL 命令、接收查询结果、执行增删改等操作。它不是“点一下就通”的瞬时动作,而是一套有状态、有生命周期、涉及认证与资源分配的完整机制。
连接是怎么建立的
客户端发起连接请求后,MySQL 服务端按顺序完成以下几步:
- TCP 三次握手(远程连接)或 Unix Socket 文件通信(本地连接)建立底层网络通路
- 验证用户名、密码、来源主机(比如
'root'@'localhost'或'app'@'192.168.1.%') - 检查该用户是否具备登录权限,以及对应库表的操作权限
- 分配一个专属线程(Thread-Per-Connection 模式)或从线程池中复用线程
- 初始化会话变量:字符集(如 utf8mb4)、时区、SQL 模式、事务隔离级别等
常见的连接方式有哪些
MySQL 支持多种物理连接协议,不同场景下默认行为不同:
- Unix Socket:本地连接默认方式(Linux/macOS),不走网络 栈,性能高、更安全,路径通常为
/tmp/mysql.sock - TCP/IP:跨机器或显式指定 IP 时使用(如
-h 127.0.0.1 -P 3306),支持远程访问,需注意 防火墙 和 bind-address 配置 - TLS/SSL 加密连接:在传输层加密数据,防止中间人窃听,适用于公网或合规要求高的环境
- Windows 特有方式(Named Pipes / Shared Memory):仅限 Windows 系统,日常开发中较少涉及
连接背后的关键配置项
这些参数直接影响连接能否成功、能开多少、能维持多久:
-
max_connections:全局最大并发连接数,默认 151,高并发应用常需调大 -
wait_timeout:非交互式连接空闲超时(如 PHP 脚本连接),单位秒,默认 28800(8 小时) -
interactive_timeout:交互式连接空闲超时(如 mysql 客户端),默认也是 28800 -
thread_cache_size:缓存空闲线程数量,减少频繁创建销毁线程开销 -
connect_timeout:客户端尝试连接时等待响应的最大时间,防卡死
连接在代码里怎么写
以 PHP 为例,主流有三种风格,本质都是完成「建立连接 → 认证 → 设置 编码 → 执行语句」这一流程:
- 面向对象 mysqli:
$mysqli = new mysqli('localhost', 'root', 'pwd', 'test'); - 过程式 mysqli:
$link = mysqli_connect('localhost', 'root', 'pwd', 'test'); - PDO(推荐):
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', 'pwd');
无论哪种方式,都建议显式设置字符集(如 utf8mb4),避免 中文乱码;生产环境应禁用 root 远程登录,使用最小权限专用账号。






























