使用docker的mysql镜像,gin后端服务连接数据库失败。
我的配置文件是这样的:(账号、密码、数据库名字都正确)
mysql:
host: 127.0.0.1
port: 3306
database: ideal
username: root
password: 1
我的docker-mysql是这样的:(端口也暴露出来了)
但是还是出现以下错误:
[error] failed to initialize database, got error dial tcp :0: connectex: The requested address is not valid in its context.
解决方式一:进入容器内部查看mysql的授权是否正确。
docker exec -it mysql bash
mysql -uroot -p1 //数据库密码是1
查看mysql的远程连接权限
select host,user,plugin,authentication_string from mysql.user
查看发现是这样的:
其中host为%代表所有ip都可以访问,但是plugin为caching_sha2_password表示mysql登陆时有更繁琐的验证机制(该plugin是在mysql:8.0.3版本后引用的,8.0.4版本成为mysql默认的身份认证插件,具体机制不清楚),而使用mysql_native_password插件,验证方式更为简单。
使用而使用mysql_native_password插件的方式也很简单,可以更改密码来修改这种插件,还可以通过修改默认的mysql配置文件来使用该插件。
在mysql的配置文件中的 [mysql] 模块中加入
default_authentication_plugin=mysql_native_password
然后重启mysql服务就好了。
修改完成后就可以连接成功了!
解决方式二:在docker容器中挂载mysql的数据。
如果遇到不可解决的docker-mysql登录问题,但是docker-mysql中的数据又很重要,必须要登陆上获取数据,那就可以在docker run mysql的时候使用-v来挂载mysql数据到本地。
当docker-mysql登录不上时,可以直接使用docker stop mysql停止容器并使用docker rm mysql 删除容器,然后使用相同的挂载点就可以在新的docker-mysql中获取到原来docker-mysql的数据。
第一步:
docker inspect mysql(容器名) 查看该容器的挂载信息
查看HostConfig挂载配置。
然后再重起一个mysql容器就好了
docker run -d --name=mysql -p 3306:3306 \
-v /e/docker/docker-mysql/data:/var/lib/mysql \
-v /e/docker/docker-mysql/conf/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=111 mysql:8.0.31
然后mysql的数据就回来了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!