我是在看网上视频时,照着做出现了下列问题。
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘虚拟机ip地址’
我在遇到这个问题时,使用的解决方案是关闭防火墙。当然,你也可以去尝试开放相应的端口号。
之后尝试重新启动相应的容器
相关代码:
#关闭防火墙
systemctl stop firewalld
#关闭防火墙的开机自启动
systemctl disable firewalld
#查看防火墙的状态
systemctl status firewalld
另外,可能用得到的docker指令。 在创建成功并使用容器(run) 时发现问题,我们一般将指定容器关闭、启动或重启即可,无需重新创建。
#停止指定容器 以mysql为例
docker stop mysql
#启动指定容器 以mysql为例
docker start mysql
#重新启动指定容器
docker restart mysql
再次尝试时,可能又会出现ERROR 2058:
出现这个问题是因为: MySQL8之前的版本的加密规则是mysql_native_password ,而在MySQL8之后,加密规则是caching_sha2_password,这里所使用的解决方法是把MySQL8用户登录密码的加密规则改回为mysql_native_password。
即:在linux中用docker进入mysql相关的容器并登录mysql进行密码加密规则的修改,并不是说用windows小黑窗修改。
最后我所尝试的mysql 容器创建代码:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_HOST='%' \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
--network hm-net\
mysql
其中多了一句(和某马程序员网课给的资料不一样的地方):
-e MYSQL_ROOT_HOST='%' \
如果后续方法不成功,可以删掉原来的mysql容器,尝试上述创建mysql容器的代码,然后再重新试一遍下列方法。
Error 2058 修改方法:
首先通过docker进入mysql容器(第一个mysql的含义),命名不一样请修改;并登录mysql,如果你的用户名不是root,或密码不是123,则注意修改一下
docker exec -it mysql mysql -uroot -p123
查询user,host可与看出
进入mysql后输入:
# 先输入use
use mysql;
#如果密码不是123, 则修改成你的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';
FLUSH PRIVILEGES;
基本上到这里我再去尝试连接就成功了。
看其他教程,有的方案是下面这一行代码,我试了之后并没有用,可能其他问题使用这个方法是有用的。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
关于重新创建mysql容器的代码:
#查看容器
docker ps
#删除指定容器 以mysql为例
docker rm -f mysql
#创建并运行容器 同前文所述
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_HOST='%' \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
--network hm-net\
mysql
最后,如有问题请评论区指正,谢谢阅读!