如何在Docker容器中修改MySQL Root密码?停止服务致容器终止需重部署吗?
在Docker容器中修改MySQL root密码的方法
嘿,这个问题我之前折腾过,其实完全不需要停止容器再重新部署,下面几种方法都能搞定,而且不用动容器的生命周期:
方法一:进入运行中的容器修改(最直观)
这是最常用的方式——毕竟MySQL是容器的主进程,停它容器直接就没了,所以直接在运行的容器里操作就行:
- 首先进入你的MySQL容器,替换成你的容器名称或ID:
docker exec -it mysql-container bash - 登录MySQL,输入旧密码:
mysql -uroot -p - 根据你的MySQL版本执行修改密码的SQL:
- 如果你用的是MySQL 5.7及更早版本:
SET PASSWORD FOR 'root'@'%' = PASSWORD('你的新密码'); - 如果你用的是MySQL 8.0及以上版本(注意语法变了):
ALTER USER 'root'@'%' IDENTIFIED BY '你的新密码';
这里的
%表示允许root从任何远程地址登录,如果只需要本地访问,可以改成localhost - 如果你用的是MySQL 5.7及更早版本:
- 刷新权限让修改生效:
FLUSH PRIVILEGES; - 退出MySQL和容器就完成了,容器全程不用停,修改立刻生效。
方法二:直接用docker exec执行SQL(适合脚本化)
不想进入容器的话,可以直接通过docker exec命令一次性执行修改密码的SQL:
- 替换容器名、旧密码、新密码,注意旧密码和
-p之间没有空格:# MySQL 8.0+版本 docker exec -it mysql-container mysql -uroot -p旧密码 -e "ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES;" # MySQL 5.7及更早版本 docker exec -it mysql-container mysql -uroot -p旧密码 -e "SET PASSWORD FOR 'root'@'%' = PASSWORD('新密码'); FLUSH PRIVILEGES;"
特殊情况:忘记旧密码怎么办?
如果连旧密码都忘了,也不用慌,我们可以临时启动容器跳过权限验证来修改:
- 先停止当前容器:
docker stop mysql-container - 重新启动容器,添加跳过权限检查的参数(加上
--skip-networking是为了防止临时启动时被外部连接):docker run -d --name mysql-container -v /your/mysql/data/path:/var/lib/mysql mysql:8.0 --skip-grant-tables --skip-networking这里的
/your/mysql/data/path是你之前挂载的数据卷路径,一定要保留,不然数据会丢失 - 进入容器并直接登录MySQL(不需要密码):
docker exec -it mysql-container mysql -uroot - 执行修改密码的SQL(同样分版本),然后刷新权限:
- 停止容器,再用正常命令启动即可,密码已经更新,数据也不会丢。
总结
完全不需要重新部署新容器!因为MySQL容器的核心数据都存在你挂载的数据卷里,只要操作时保留数据卷,修改密码的操作都是持久化的。优先用前两种方法,只有忘记密码时才需要临时调整容器启动参数。
内容的提问来源于stack exchange,提问作者胡亦朗
相关产品推荐
相关产品推荐

