error dial tcp 127.0.0.1:3306: connect: connection refused
2023-04-18 16:28:02 时间
项目场景:
项目场景:微服务项目中使用consul作为配置中心存储mysql配置,获取配置后使用gorm连接mysql数据库时出现错误。
问题描述
error dial tcp 127.0.0.1:3306: connect: connection refused
// get mysql config from consul
mysqlInfo := common.GetMysqlFromConsul(consulConfig, "mysql")
db, err := gorm.Open("mysql", mysqlInfo.User+":"+mysqlInfo.Pwd+"@/"+mysqlInfo.Database+"?charset=utf8&parseTime=True&loc=Local")
if err != nil {
log.Error(err)
}
原因分析:
consul中mysql配置如图:
使用docker启动MySQL容器实例,命令如下:
docker run -p 3360:3360 -v $pwd/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
启动mysql容器实例后使用docker命令查看正在运行的容器:
docker ps
一般出现error dial tcp 127.0.0.1:3306: connect: connection refused,有两种情况:
第一种情况如果地址是正确的,那么就是mysql没有启动,但是通过查看正在运行的容器,发现mysql是已经启动并且正在运行了,所以不是这种情况。
第二种情况就是地址错误了,通过查看mysql容器实例所暴露出来的端口为3360,而consul中mysql配置的端口为3306。
解决方案:
在docker启动mysql容器实例时使用的命令指定端口映射为3360,而配置中心mysql配置为3306,自然就会出错了。
使用docker命令停止mysql容器:
docker stop mysql容器实例id
使用docker命令启动mysql容器,指定端口映射为3306:
docker run -p 3306:3306 -v $pwd/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
容器启动后再次运行项目,问题就解决了
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!