那天加班改项目配置,数据库突然连不上,弹窗提示密码验证失败,才想着要去搞mysql怎么改密码,手上的文档丢的七零八落,只能凭着模糊的印象在服务器里面瞎点。就是很烦躁,前面刚调完接口,本来想着测试一把就下班,结果卡在数据库这一步,控制台的红字一行接一行往外跳,敲命令的时候手都有点急,输错好几个字符。

最先想到的办法,是直接在客户端里面找修改密码的选项,打开图形化工具,点用户管理那一块,填上新密码,点保存,刷新之后再去连接,还是报密码错误。来回试了三四次,新密码换了简单的、长一点带符号的,全都不行,那会就怀疑是不是权限的问题,可又不知道去哪看权限配置,网上随便翻到一段命令,直接复制粘贴进去执行,执行倒是没报错,可登录依旧被拦下来。

有点懵。

后来才反应过来,我操作的这个mysql版本和搜到的教程不是同一个,旧版本的语法拿到这边根本不生效,只是不会抛出明显的报错,看起来像是执行成功了,实际上密码一点没变。之前完全没留意版本这件事,教程里写的语句直接照搬,白白耗掉半个多小时,服务器窗口开了好几个,上面堆着一堆无效的执行记录,越看越乱。

关掉图形工具,切到命令行界面,想着先跳过密码验证进去再说,照着看到的步骤,停掉mysql服务,在配置文件里面加免密的参数,重启服务之后不用密码就能登录进去。进到里面的时候松了一口气,以为这下稳了,敲修改密码的语句,敲完回车,返回ok,当时心里还觉得这下总算搞定了,赶紧把配置文件里那行免密的内容删掉,重新启动服务。

再次连接的时候,依旧提示密码不对。

盯着屏幕愣了好一会,完全搞不懂哪里出问题,明明命令返回成功,配置也恢复原样,密码就是不生效。反复重启服务好几次,每改一次密码就重启一次,服务器的命令行来回切换,连用户和主机那一块都没仔细区分,我只改了localhost的账号,程序连接用的是另外一个主机地址,两个不是同一个,改完当然不起作用,这个点压根就没往脑子里去,光顾着盯着密码字段了。

找同事过来瞅了一眼,他指出来主机那栏的区别,我才反应过来,同一个用户名,绑定不同的主机,是两条独立的记录,改其中一条,另一条的密码维持原样。之前一直盯着localhost那条记录改,项目程序访问数据库用的是%的那条,自然怎么试都连不上。按着他说的,找到对应的那条用户记录,重新执行修改的语句,这一回执行完,再去尝试连接,总算顺利进去了。

折腾完的时候,窗外天早就暗了,办公室只剩下我这一台电脑屏幕亮着。只是这个过程里踩的坑,很多都是很小很细碎的地方,语法、版本、主机匹配,随便漏一个,前面的操作全部白费。这仅仅只是我自己这一次碰到的情况,不同的环境,不同的部署方式,遇到的状况肯定不一样,别人照着我这个流程走,说不定还会碰到别的拦路虎。

关掉数据库连接窗口,顺手把刚才改过的配置文件滚动回看一遍,确认免密的参数已经清理干净,怕留着这个留下安全隐患。不想再碰任何命令了,合上笔记本,收拾东西准备走。