通常当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版权协议,如有转载请注明出处,谢谢。
?
?
|