目錄
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密碼,一旦容器重新啟動,就完了!