随着企业规模增长,或者,企业原本就在监管非常严格的行业或环境,所面临合规要求也会逐步增多,密码的定期轮换通常也是众多要求中的一个基础项。MySQL 8.0 提供的“双密码”管理机制,可以让大规模数据库密码轮换变得更平滑,而无需任何的停机时间。
100台MySQL、1000台应用服务
考虑这样的场景,你是一个 DBA ,生产环境有 100 台 MySQL 实例,运行在这些数据库上约有 1000 台应用服务器。如果需要对,这些 MySQL 的应用账号密码统一做一次更新,如何实现不停机的迁移。
在 MySQL 之前(8.0.14版本之前)的单密码机制下,更换密码通常会遇到以下问题:无论是先更新数据库服务器上的密码,还是新调整应用服务器上的密码,这个先后顺序都会带来一定的服务不可用时间。通常,为了降低这个服务不可用时间,应用变更人员和 DBA 则需要非常密切的配合。
双密码机制(dual password)
从 MySQL 8.0.14 起,开始支持了双密码策略。在密码更换时,可以保留旧密码依旧可用:
ALTER USER 'appuser1'@'host1.example.com'
IDENTIFIED BY 'password_b'
RETAIN CURRENT PASSWORD;
在一段时间后,可以删除旧密码:
ALTER USER 'appuser1'@'host1.example.com'
DISCARD OLD PASSWORD;
构建批量密码轮换流程
有了该功能,就可以使用上述的命令,更加平滑的实现大规模数据库场景下的密码更换。
- 给变更数据库服务器上账号的密码,同时将原密码作为备用密码保留(使用“
RETAIN CURRENT PASSWORD
”) - 变更应用服务器上的访问数据库的密码
- 检查并观察一段时间,删除数据库中的原密码(使用“
DISCARD OLD PASSWORD
”)
这是一个简化的过程,实际的操作还需要考虑:
- 严格遵循企业内部的变更规范
- 灰度的进行发布,而不是一次性操作所有的实例/服务器
- 做好检查,需要确保诸如密码已经变更完成、应用服务器密码均已经更新
- 做好回滚方案,避免过程中操作失误导致的问题
- 在业务低峰时间进行操作
Leave a Reply