(原创)2021-09-12当生产上的docker容器mysql忘记root密码时的完美解决方案

本文介绍如何在Docker容器内的MySQL密码丢失后,通过修改宿主机my.cnf配置、重启服务并调整防火墙设置来恢复访问。重点在于在容器环境下的操作步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常当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
得到如下结果:

 逐个使用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!

当docker容器重启成功后:
docker restart mysql(docker容器的名字)
然后mysql -h(docker的虚拟网卡地址)就好了。

如果可以在远程使用navicat之类的客户端工具连接,注意连接上之后,在宿主机的firewall中去掉当前的公网mysql服务端口号,系统的当前端口列表中不显示3306即可,否则容易被无处不在的扫描器扫描到。navicat是采用interative方式连接的,因此做大数据备份应不受影响。

欢迎讨论!本文章遵循GPL版权协议,如有转载请注明出处,谢谢。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值