MySQL 的 socket 文件是本地客户端连接 MySQL 服务器时使用的 Unix 域套接字(Unix domain socket),它绕过 TCP/IP 协议栈,性能更高、更安全,仅适用于本机连接。配置的关键在于确保
mysqld服务启动时正确生成 socket 文件,且客户端(如
mysql命令行工具、PHP、Python 等)能准确定位该文件。
查看当前 MySQL 使用的 socket 路径
登录 MySQL 后执行以下 SQL 命令即可查到实际路径:
mysql> SHOW VARIABLES LIKE 'socket';输出类似:
+---------------+-----------------------------+| Variable_name | Value |
+---------------+-----------------------------+
| socket | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
这个路径就是当前生效的 socket 文件位置,后续配置需保持一致。
在 my.cnf 中统一配置 socket 路径
编辑 MySQL 主配置文件(常见路径:
/etc/my.cnf或
/etc/mysql/my.cnf或
/usr/etc/my.cnf),在
[mysqld]和
[client]两个段落下分别指定
socket: [mysqld] 段控制服务端监听路径,例如:
socket = /var/run/mysqld/mysqld.sock [client] 段控制默认客户端连接路径,例如:
socket = /var/run/mysqld/mysqld.sock 可选:为兼容性,在
[mysql]、
[mysqldump]等子段也显式声明相同路径
修改后需重启 MySQL 服务生效:
sudo systemctl restart mysql(或
mysqld,依系统而定)
客户端连接时显式指定 socket 路径
若未在
[client]段配置,或需临时切换 socket,可通过命令行参数指定: 使用
-S参数连接:
mysql -u root -p -S /var/run/mysqld/mysqld.sock PHP 中使用 PDO 或 mysqli 时,在 DSN 或连接参数中设置:
mysqli://root:pass@localhost:3306/db?unix_socket=/var/run/mysqld/mysqld.sock Python 的
pymysql或
mysql-connector-python支持
unix_socket参数
常见问题与注意事项
socket 文件目录(如/var/run/mysqld/)必须存在,且
mysql用户有读写权限 SELinux 或 AppArmor 可能阻止 mysqld 创建 socket,需检查日志并调整策略 Docker 容器中运行 MySQL 时,宿主机和容器内路径不同,需通过卷映射确保客户端访问路径一致 Mac 上 Homebrew 安装的 MySQL 默认 socket 通常在
/tmp/mysql.sock,Linux 发行版多为
/var/run/mysqld/mysqld.sock
