最近在参与一个go的项目开发时使用mysql数据库与Goland连接出现了错误,然后进行了一系列搜索,最终选择了这个解决方法。(这个方法确实有点莽,但我已经快抓狂了)
问题情况(因为我同时出现了这两个问题)Communications link failure:The last packet sent successfully to the server was 0 milliseconds ago.
解决方法: 此时要先考虑三个问题:-
是否在mysql安装目录下有data目录
- 如果没有那么打开管理员Dos窗口‘cd’命令跳转进入bin目录下
- 执行操作mysqld --initialize 进行mysql初始化,此时会在bin目录的同分支下自动生成data目录
- 尽量不推荐手动创建以免出现更多问题
-
是否拥有my.ini文件
-
如果没有则在mysql安装目录下也就是放置bin和data的目录下创建一个my.ini文件
-
[mysqld] character-set-server=utf8mb4 bind-address=0.0.0.0 port=3306 default-storage-engine=INNODB [mysql] default-character-set=utf8mb4 [client] default-character-set=utf8mb4
-
文件内这样写即可,如果有其他需求请自行查询添加
-
-
‘3306’ 端口已经被占用
- 通过netstat -ano 查询端口信息,看3306端口是否已经被占用
因为我是mysql开启时间过长没有使用导致默认连接关闭(这是因为mysql默认开启8小时),网上的办法已经全部试过都不能成功。不仅数据库连接IDE连接失败,就连数据库的开启都失败了。所以我采用了以下方法。
-
我是抱着试一试(并且头疼)的想法,先将data目录进行复制到桌面上(一会要删除,尽量备份一下)
-
在dos窗口先关闭mysql服务 net stop mysql或者通过任务管理器找到mysql服务然后关闭都可以
-
删除data目录(最好先保存一个备份),然后通过Dos窗口cd进入到mysql安装目录下的bin目录下,进行初始化(该操作上方有说明),重新生成data目录
-
果然此时重新使用 net start mysql即可成功开启mysql。
开启之后怎么设置密码?
- 新版本下已经不支持 mysqld --skip-grant-tables 这个跳过检测的操作(我的是mysql8.0.28)
- 打开管理员模式下的DOS窗口并跳转到bin目录(已经讲过两次怎么跳转了,这个操作的目的是要找到mysqld.exe),使用mysqld --console --skip-grant-tables --shared-memory命令
- 此时你的窗口会出现闪烁标志但无法进行输入,然后需要你再打开一个Dos窗口并输入mysql
- flush privileges;这个必须有,更新权限,否则会报错
- 你就会进入到mysql中,然后就是输入set passward for root@localhost='你想设置的密码';这个分号必须有
- 此时已经结束,如果你想测试是否成功,那么下方继续进行操作。
- 此时关闭你的第一个Dos窗口(在闪烁无法进行输入那个),然后在第二个Dos窗口中退出mysql。
- 输入 mysql -u root -p这个root是你的用户名,因为你修改的就是root密码
- 然后输入密码,成功登录进mysql即可
下边是我能连接成功IDE的截图



