通常当mysql密码被忘记时,有运维经验的同学会马上想到用skip-grant-tables修改my.cnf配置文件,然后重启数据库,但是一旦这个mysql服务在docker容器中怎么办?
不要急,首先先查到到这个docker容器的名字:
docker ps
找到结果中的 name这列,然后下列指令登录docker容器的bash。通常在docker容器镜像文件制作的时候,会打包进去基本的bash命令,例如cat和ls,用好这两样能做不少事。
登录进入容器:
docker exec -it mysql bash
接下来,键入如下指令,查看具体在docker中的mysql配置文件的映射所在:
mysql --help | grep my.cnf
得到如下结果:
![](https://img-blog.csdnimg.cn/20210912230827189.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NwaXQyYjJj,size_16,color_FFFFFF,t_70,g_se,x_16)
逐个使用cat查看:
cat /etc/mysql/my.cnf
发现/etc/mysql/my.cnf 的文件末尾有这么两行 ,就是mysql目前使用的配置路径:说明是从宿主机映射包含过来的,因此修改宿主机的配置文件,再重新启动docker就好了。
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
找到宿主机 /etc/mysql/mysql.conf.d/目录下,除了一个docker配置文件,还有就是mysql的配置文件,修改这里,在 [mysqld] 部分的最后加skip,重启docker ok!
![](https://img-blog.csdnimg.cn/20210912231042386.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NwaXQyYjJj,size_13,color_FFFFFF,t_70,g_se,x_16)
当docker容器重启成功后:
docker restart mysql(docker容器的名字)
然后mysql -h(docker的虚拟网卡地址)就好了。
![](https://img-blog.csdnimg.cn/20210912231304384.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NwaXQyYjJj,size_20,color_FFFFFF,t_70,g_se,x_16)
如果可以在远程使用navicat之类的客户端工具连接,注意连接上之后,在宿主机的firewall中去掉当前的公网mysql服务端口号,系统的当前端口列表中不显示3306即可,否则容易被无处不在的扫描器扫描到。navicat是采用interative方式连接的,因此做大数据备份应不受影响。
欢迎讨论!本文章遵循GPL版权协议,如有转载请注明出处,谢谢。