You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rust的Diesel执行MySQL迁移时连接失败求助

问题描述

我通过以下命令创建了包含MySQL的Docker容器:

docker container run --name mysql-831 -e MYSQL_ROOT_PASSWORD=P@ssw0rd -e MYSQL_SSL=false -e MYSQL_ALLOW_EMPYT_PASSWORD=true -e MYSQL_ALLOW_LOCAL_INFILE=true -p 3306:3306 -d mysql:latest

容器运行正常,我已通过DBeaver界面成功连接该数据库,但当设置DATABASE_URL为DATABASE_URL=mysql://root@192.168.65.1:P@ssw0rd@localhost/mysql并执行diesel migration run命令时,出现如下错误:

Could not connect to database via `mysql://root@192.168.65.1:P@ssw0rd@localhost/mysql`: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

DBeaver连接配置截图:
DBeaver编辑连接界面

解决方案
  • 修正DATABASE_URL格式
    MySQL连接URL的正确格式为 mysql://<用户名>:<密码>@<主机>:<端口>/<数据库名>。你的URL错误地重复了@符号,导致Diesel解析失败,转而尝试本地socket连接。正确的URL应为:

    DATABASE_URL=mysql://root:P@ssw0rd@localhost:3306/mysql
    

    若192.168.65.1是Docker主机的有效IP,也可使用:

    DATABASE_URL=mysql://root:P@ssw0rd@192.168.65.1:3306/mysql
    
  • 特殊字符处理(若密码含特殊符号)
    当密码包含@这类URL特殊字符时,需要进行URL编码,将@替换为%40,示例:

    DATABASE_URL=mysql://root:P%40ssw0rd@localhost:3306/mysql
    
  • 确认连接方式
    DBeaver配置中明确指定了端口3306,走TCP连接;修正后的URL通过指定端口,会强制Diesel使用TCP连接,与DBeaver的连接逻辑保持一致,避免socket连接的错误。

内容的提问来源于stack exchange,提问作者Vagner Wentz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:41:10