使用 MySQL 8.0 双密码功能实现无中断的密码更换

随着企业规模增长,或者,企业原本就在监管非常严格的行业或环境,所面临合规要求也会逐步增多,密码的定期轮换通常也是众多要求中的一个基础项。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;

构建批量密码轮换流程

有了该功能,就可以使用上述的命令,更加平滑的实现大规模数据库场景下的密码更换。

  1. 给变更数据库服务器上账号的密码,同时将原密码作为备用密码保留(使用“RETAIN CURRENT PASSWORD”)
  2. 变更应用服务器上的访问数据库的密码
  3. 检查并观察一段时间,删除数据库中的原密码(使用“DISCARD OLD PASSWORD ”)

这是一个简化的过程,实际的操作还需要考虑:

  • 严格遵循企业内部的变更规范
  • 灰度的进行发布,而不是一次性操作所有的实例/服务器
  • 做好检查,需要确保诸如密码已经变更完成、应用服务器密码均已经更新
  • 做好回滚方案,避免过程中操作失误导致的问题
  • 在业务低峰时间进行操作

参考阅读

In:

Leave a Reply

Your email address will not be published. Required fields are marked *