数据库密码热修改应该如何进行


不知道大家能不能看懂 数据库密码热修改 这个短语的意思,就是 热拔插 (我不知道该怎么描述啊...囧),就是说 在网站在运行的状态下修改数据库密码而不会出现密码错误之类的报错


我的博客(Typecho)访问量很低很低,修改数据库密码的话不用考虑报错,因为在那短短的十几秒内(在主机控制面板修改)有人访问的概率是相当相当低的。我猜测很多人/很多小网站都是这样的吧,访问量稍微大一点的话可以在夜深人静的时候进行。

那么问题来了:访问量大的网站(比如说 SF 什么的)应该如何进行数据库密码的热修改?


在写这个问题的时候我突然想到的一种解决方案是

在配置文件里把数据库密码写成一个数组,保存两个或者多个密码,每次连接时如果 密码1 报错那么就采用 密码2 进行连接。
在修改密码之前先把配置文件中无效的那个密码改成即将要修改的新密码,然后再去修改数据库密码,这样应该可以实现新旧密码共存从而进行无缝切换。

但是感觉这样效率会不会降低,在平时都没有修改密码的情况下,每次连接数据库都要进行一次判断...


P.S.不要局限于我想到的这个方案啊喂(感觉每次提问如果我留了一个方案的话很多人就会顺着我的思路去改进),我在这方面 没有经验 的啊喂!!

运维 mysql php

宇智波佐助 9 years, 10 months ago

嗯,举个之前的小栗子。密码过期问题是通过异常进行处理,说白了就是重试。当密码配置被重新下发后,新的连接会使用新的配置,而旧的连接发生异常后会销毁,因为是一个连接池管理的连接,所以什么都不用做新建一个便是,多偷懒多简单 :> 。

实际上在 Mysql 协议中,连接建立后密码失效 ERROR 1820 (实际上对应着用户失效),可以采用 SET PASSWORD 进行变更。所以,题主的担心大可不必,等着抛异常,在异常里处理更换当前连接的密码重试就好。

害羞的膀胱 answered 9 years, 10 months ago

Your Answer