3.2.4.5. 更改密码
密码是镜像配置的一部分,因此唯一支持的为数据库用户(MYSQL_USER
)和 root 用户更改密码的方法是分别更改环境变量 MYSQL_PASSWORD
和 MYSQL_ROOT_PASSWORD
。
您可以通过在 web 控制台中查看 pod 或部署配置,或通过 CLI 列出环境变量来查看当前的密码:
$ oc set env pod <pod_name> --list
当设置了 MYSQL_ROOT_PASSWORD
时,它就会为 root 用户启用远程访问,并可在有密码时启用远程访问。如果没有设置,会禁用 root 用户的远程访问。这不会影响通常具有远程访问权限的普通用户 MYSQL_USER
。这也不会影响 root 用户的本地访问,root 用户总是可以在 localhost 中不带密码登录。
通过 SQL 语句或者通过环境变量更改数据库密码会导致变量中保存的值与实际密码不匹配。每当数据库容器启动时,它会将密码重置至环境变量中存储的值。
要更改这些密码,使用 oc set env
命令为相关的部署配置更新一个或多个所需的环境变量。如果多个部署配置使用这些环境变量,例如从模板创建应用程序时,您必须更新每个部署配置上的变量,以便密码可在所有方面同步。这可以在同一命令中完成:
$ oc set env dc <dc_name> [<dc_name_2> ...] \ MYSQL_PASSWORD=<new_password> \ MYSQL_ROOT_PASSWORD=<new_root_password>
根据您的应用程序,应用程序的其它部分可能还会有其他密码的环境变量,它们也应该更新以匹配。例如,前端 pod 中可能会有一个更通用的 DATABASE_USER
变量,该变量应该与数据库用户的密码匹配。确保每个应用程序正在同步所有必需的环境变量,否则您的 pod 可能无法在触发时重新部署。
如果您 配置更改触发器,更新环境变量会触发数据库服务器的重新部署。否则,您必须手动启动新的部署以应用密码更改。
要验证新密码是否生效,首先请打开正在运行的 MySQL pod 的远程 shell 会话:
$ oc rsh <pod>
在 bash shell 中验证数据库用户的新密码:
bash-4.2$ mysql -u $MYSQL_USER -p<new_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"
如果正确修改了密码,您应该可以看到类似如下的表:
+------------+---------------------+ | database() | user() | +------------+---------------------+ | sampledb | user0PG@172.17.42.1 | +------------+---------------------+
验证 root 用户的新密码:
bash-4.2$ mysql -u root -p<new_root_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"
如果正确修改了密码,您应该可以看到类似如下的表:
+------------+------------------+ | database() | user() | +------------+------------------+ | sampledb | root@172.17.42.1 | +------------+------------------+