使用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连接配置截图:
解决方案
修正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
相关产品推荐
相关产品推荐

