Ubuntu下用XAMPP时Flask的flask-mysqldb连MySQL找不到sock文件如何解决
问题根因
报错的核心原因是flask-mysqldb依赖的mysqlclient库默认读取系统默认MySQL套接字路径/var/run/mysqld/mysqld.sock,但XAMPP集成的MySQL套接字实际路径为/opt/lampp/var/mysql/mysql.sock,路径不匹配导致连接失败。mysql-connector支持优先读取自定义配置或默认走TCP连接,因此可以正常连接。
解决方案(按稳定性和操作便捷度排序)
方案1:Flask应用内指定套接字路径(首推,无系统改动)
直接在Flask的MySQL配置中新增MYSQL_UNIX_SOCKET参数,指定XAMPP的套接字路径即可,无需修改任何系统配置,不会影响其他服务,示例配置如下:
from flask import Flask from flask_mysqldb import MySQL app = Flask(__name__) # 原有基础配置 app.config['MYSQL_USER'] = '数据库用户名' app.config['MYSQL_PASSWORD'] = '数据库密码' app.config['MYSQL_DB'] = '目标数据库名' # 新增套接字路径配置 app.config['MYSQL_UNIX_SOCKET'] = '/opt/lampp/var/mysql/mysql.sock' mysql = MySQL(app)
修改后重启Flask应用即可生效。
方案2:创建软链接映射默认路径
如果不需要修改应用代码,可以通过软链接将XAMPP的套接字映射到系统默认路径,操作如下:
- 首先创建系统默认的MySQL套接字存放目录(如果不存在):
sudo mkdir -p /var/run/mysqld
- 创建软链接:
sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
- 赋予目录对应权限:
sudo chmod -R 755 /var/run/mysqld
注意:
/var/run属于临时文件系统,系统重启后内容会清空,软链接会失效。如果需要永久生效可将软链接命令写入/etc/rc.local开机自启脚本,更推荐直接使用方案1。
方案3:调整MySQL配置文件读取优先级
之前修改的/etc/mysql/my.cnf未生效,是因为mysqlclient会优先读取当前用户家目录下的.my.cnf配置,操作如下:
- 编辑用户目录下的MySQL配置文件:
nano ~/.my.cnf
- 写入以下配置:
[client] socket = /opt/lampp/var/mysql/mysql.sock [mysqld] socket = /opt/lampp/var/mysql/mysql.sock
- 保存退出后重启终端,再运行Flask应用即可。
内容的提问来源于stack exchange,提问作者user16570427
相关产品推荐
相关产品推荐

