我的编程空间,编程开发者的网络收藏夹
学习永远不晚

虚拟机使用docker安装MySql出现的问题,Navicat连不上MySql

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

虚拟机使用docker安装MySql出现的问题,Navicat连不上MySql

文章目录

一、问题引入

二、问题分析 

三、问题解决 

​四、总结


一、问题引入

今天是学习谷粒商城的第一天,既然是第一天,肯定就是先对项目先有个基本的了解,比如是项目所用到的技术栈,项目整体的架构等,还对分布式的相关概念简单说了一下。

接下来来就是搭建环境了,与以往不同的是,先是从运维搭起,也就是先装虚拟机,然后在虚拟机上装相关软件,比如说Docker、Mysql、Redis。当然雷神他上课不是用到Vmware虚拟机,而是另外一个虚拟机平台,virtualBox,并且使用vagrant快速集成centos,然后使用windows的cmd进行操作。本来还想试一下的,可是因为要安装centos,下载的真的很慢,并且VMware+Xshell也挺好用的,我就在WMware上面另外又搭建了一台Linux系统。然后就是正式配环境了,使用Docker容器技术安装相关软件。

首先就是安装MySql,当我pull下来,然后run之后,并且ps了一下,发现MySql容器已经启动了,然后用Navicate连了一下,发现怎么也连不起来,报错如下:

二、问题分析 

说句实话,看到这个我的第一反应是,IP地址是不是写错了或者是虚拟机防火墙开着,不允许外界访问啥的,可是我看IP没错,防火墙也被我关了。是的,我比较菜,之后就想不到什么了,之后使用Docker的ps命令发现MySql已经restart了,所以是启动出了问题,我就开始怀疑是不是我那个run的那一长串是不是写错了,最开始,我在记事本上面手写了一遍,确实最开始的时候,我写的确实有问题,问题出在目录挂载那里,前面写错,没有以/开头,后面也写错了,先mysql,报错如下:

 看到最后我知道要使用绝对路径,改了之后确实也启动了,

随即我就使用navicat连,发现连不上,后面就一直restarting:

  后面我就傻不拉几的把容器删了重启,还以为自己的那个不对,还改成了和老师一样的写法,就是把我的那个开机自启(restart=always)去掉了,来来回回重复了好几遍,最后我把镜像都删了,重置,最后也是没能解决问题(确实这里是犯傻了,其实我最开始启动了,最开始UP了说明那一长串其实是没问题的,我还一直纠结这个),后面没办法了咯,只能在网上查了咯,搜索的关键字是:Navicat连不上虚拟机里面使用docker安装的MySql,看到的结果有下面这些:

MySQL服务是不是正常开启了

到Docker这里就是容器是否启动成功了呗,确实我的容器就没启动成功

MySQL未远程授权

确实这也是一个问题,当时根本没在乎这里,没这种意识

虚拟机防火墙的问题,未开放端口啥的

我把防火墙关了,所以问题肯定不是在这

排错方法如下:


首先明确容器就启动失败,得先从容器这里入手:

后面我换了之前学Docker的时候成功的run命令:

结果这样:

我滴个妈呀,这到底咋回事呀,之前都好好的,现在就出一些问题呢,(ps:其实这里报错有显示my.cnf的事,我没太在意,最后问题确实也很这里有关系) 。

反正目前是启动都失败,还不要先管其它的,先把它正常启动再说,后面我找到了一篇博客,解决了我的问题:

他说既然你没启动,那就看容器的日志的报错信息(ps:确实这点我有问题,没有查看容器错误日志的这种意识)。

日志的报错信息如下:

解决办法是:我的宿主机的conf目录,下面得配置my.cnf文件,文件里面写东西,就是在conf目录下,创建一个my.cnf的文件,文件里面写下面这些:

[mysqld]user=mysqlcharacter-set-server=utf8default_authentication_plugin=mysql_native_passwordsecure_file_priv=/var/lib/mysqlexpire_logs_days=7sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONmax_connections=1000 [client]default-character-set=utf8 [mysql]default-character-set=utf8

也就是这篇博文:

(20条消息) docker的mysql容器exited(1)无法正常启动_敲着bug的小熊的博客-CSDN博客 

 重新启动容器,发现也一直是UP状态了,说明启动成功:

 启动是成功了,可是我的navacat依旧是连不上。

然后下面这篇博文就说,要改密码,反正他改了密码就行了:

(20条消息) docker安装mysql后Navicat链接不上的问题_小城南的博客-CSDN博客

后面我就使用exec命令进入到MySQL容器里面。(ps:这里我又傻了一下,进入到容器里面就这个use user了这个使用mysql命令了,其实还没有连接上MySql客户端呢,当然通过这个我也更加理解了一个Docker容器其实相当于就是一台虚拟机,在这里就是装有MySql的一台虚拟机,这里联想到挂载目录,其实也想得明白了,容器中的/var然后再/mysql,不就相当于一台Linux吗)。

好,接下来问题又来了,使用密码登录MySql客户端居然连不上了,这是我在以前从未出现过的问题,报错如下:

 我滴个妈,这又是咋回事呀,怎么我是设置了密码启动的,怎么还连接不上了,没办法咯,之前也没遇到过,继续百度咯,后面看到下面这篇博文:

说不需要使用密码,直接回车,然后改一下密码,然后再重新设置密码,最后重新启动MySql,最后再重新登录就行了。

下面是这篇博文地址:

(20条消息) 解决mysql:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YES)_刀光剑影aaa的博客-CSDN博客 最后我试了试,确实可以直接回车进行登录:

可能是博主多写了把,其实这里是没有password的,修改密码直接是:

update user set authentication_string = '123456' where user = 'root'

修改为然后flush一下:

flush privileges;

那到底怎样解决密码问题呢?后面我又看了另外的一篇博文:

 这是修改root密码的方法

下面是这篇博文地址:

(20条消息) MySQL修改root用户密码_mysql修改密码命令_折竹丶的博客-CSDN博客

这篇博文确实挺好的值得推荐,提供了修改root用户密码的方式,还提供了忘记密码和知道密码的两种方式修改密码的方法。

按照他的步骤我确实修改密码成功了,使用新密码登入客户端成功:

 好了,按照之前博文所说的,修改密码之后,应该navacat现在应该可以正常连接上了吧,结果却还是连接不上。

后来我又看到一篇博文说要改一下这个,如下图所示,这样改一下密码就行了:

 结果都是这个报错;

Operation ALTER USER failed for 'root'@'%'

然后我又继续查看博文,下面的博文解决了我的问题

这是博文地址:(20条消息) ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘_Mr.Java.的博客-CSDN博客

按照他之前所说的,我得先有'root'@'%'后面我使用下面这条语句将其修改成这个:

update user set host ='%' where user='root';

修改之后结果是这样:

 还是不行,所以我就只能按照他所说的还是不行的方法:

 先置密码为空,然后重新设置密码;

最终使用navicate连接成功!!!

后面我又测试了一下,将其将root用户的host修改为localhost,结果确实连不上,最后还是重新修改成%然后再使用上面两步重置密码解决。

三、问题解决 

 1. 首先解决MySql容器无法启动的问题:

在宿主机的conf目录下面配置这个:

​[mysqld]user=mysqlcharacter-set-server=utf8default_authentication_plugin=mysql_native_passwordsecure_file_priv=/var/lib/mysqlexpire_logs_days=7sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONmax_connections=1000 [client]default-character-set=utf8 [mysql]default-character-set=utf8​

客户端使用密码无法登录

使用下面方法重置root账号密码:

 

 3. 如果还有问题,试一下这个

 如果尝试这个的时候报了下面这个错:

Operation ALTER USER failed for 'root'@'%'

就先这样让'root'的host为'%':

update user set host ='%' where user='root';

重新尝试上面那个,如果还是有问题,直接下面这样:

 四、总结

首先要有查看容器的日志的报错信息的意识,这一点我是没有意识的,后面是通过查看日志,才知道是my.cnf没有配置的问题,配置了MySql容器就可以正常启动了

知道如果客户端使用密码登不进,尝试是否可以直接回车进去,进去之后修改密码

方法是

1 先切换到mysql数据库,将密码置为空

2 然后设置加密规则,重新设置密码,并进行授权

要有navicat连不上MySql可能是root用户的host是localhost的缘故的这种意识,也就是是否支持远程连接,知道使用 update user set host ='%' where user='root';这条命令进行修改。

来源地址:https://blog.csdn.net/m0_63445035/article/details/131137912

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

虚拟机使用docker安装MySql出现的问题,Navicat连不上MySql

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux虚拟机上怎么安装docker并使用docker安装mysql

Linux虚拟机上怎么安装docker并使用docker安装mysql,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、序言现在在Linux虚拟机上安装程序,越来越多的人都使用
2023-06-05

Navicat连接linux虚拟机上的MySQL可能遇到的问题及排查方法

Navicat连接Linux虚拟机上的MySQL时可能遇到的问题及排查方法包括:网络问题:检查端口是否开放、网络段是否匹配。连接信息不正确:核对用户名、密码、端口、主机名/IP地址。SSH错误:开启SSH服务、开放端口、检查认证。MySQL服务问题:启动服务、检查监听端口、授予权限。Navicat配置问题:匹配连接类型、检查证书和超时时间。其他问题:检查安全组限制、第三方防火墙、网络拥塞、操作系统兼容性。排查方法:检查网络连接和防火墙。核对连接信息。尝试命令行连接MySQL。重启MySQL服务和虚拟机。查
Navicat连接linux虚拟机上的MySQL可能遇到的问题及排查方法
2024-04-02

使用docker 部署mysql突然连接不上的问题及解决方法

WARNING: IPv4 forwarding is disabled. Networking will not work.大概意思就是说,网络不能用,也就意味着不能连网络,所以远程才连不上mysql。找到原因之后,就简单了,可以对症
2022-06-28

编程热搜

目录