目录
0、前情摘要
最近公司护网行动,又要排查所有的中间件密码,其中 mysql的密码修改遇到了问题,需要分享一下。
1、mysql docker镜像设置密码
启动的时候,设置环境变量就可以配置 mysql的密码:
- MYSQL_ROOT_PASSWORD :root的密码
- MYSQL_USER :建一个普通用户
- MYSQL_PASSWORD :普通用户的密码
2、mysql docker镜像修改密码
当需要修改mysql密码的时候,发现修改环境变量再重启,密码并没有修改,因为已经持久化了,密码存下来了,不会再读取环境变量了。
只能通过mysql命令行来修改了。
# 用旧密码登陆root
mysql -uroot -p
# 修改普通用户的密码
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');
# 修改root密码
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxxxxxx');
3、问题来了,mysql容器重启起不来了!
其实不需要重启,密码已经生效了,但是只有重启才会暴露出来这个问题!你也无法保证容器不重启啊!
报错信息:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- 意思就是密码错误!!!但是怎么可能密码错误呢???我都用 navicat 连上了呀!!!
- 上边这句话里就存在题眼了:::navicat 和 localhost 肯定不是一个 host !!!
- 问题就是你只改了其他host连接的root 密码,localhost的root密码没有改!!!
- 但是为什么重启mysql容器的时候,会用 'root'@'localhost' 和 新密码 来个登陆???mysql还是不够了解啊。
4、docker mysql 修改密码的姿势
# 修改普通用户,只改一个就好
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');
# 修改root用户,改两个
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxx');
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('xxxxxxxxx');
5、如果docker 容器已经在无限重启了
如果你只改了 % 的root,没有改 localhost的root密码,一旦容器重新启动,就完了!