首先,给大家介绍一下TDSQL。TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。(TDSQL(mysql版)产品详细信息https://cloud.tencent.com/product/dcdb/details)
相信有部分公司已经在使用或者试用过这款数据库产品了,那么在部署和使用中都或多或少的遇到一些问题,下面我先给各位介绍一下我遇到的这个问题。
一、问题:
众所周知,TDSQL集群会在一开始初始化时产出一个监控库实例,正常情况下我们是不建议用户去操作或者独自操作监控库这个实例的。但如果因为误操作与不小心修改了监控库的密码,并且又没有记住,下面这段应该能帮到你。
二、故障复现:
以下操作为我在自己的测试环境进行的问题复现。
修改监控库密码:
进入监控库实例,查看实例的访问账户信息:
对如上tdsqlpcloud账号进行修改密码操作:
在确认修改密码之后,窗口立马会出现php错误提示信息:
随后我们刷新赤兔页面,将会发现赤兔已经没有办法正常访问了。
三、排查过程与问题解决:
接下来就是我们的排查思路,首先我们先看报错,最上面提示我们username or password error就已经暴露出问题,证明这个问题是我们修改密码导致的。而下面的Backtrace暴露给我们的则是赤兔页面上的组件监控获取的方式,同样是去监控库里面取所需要的数据。
在部署的过程中我们已知有这么几个地方会存放监控库的账户名密码,第一是在安装部署包的group_vars/all内,但这个只是初期录入的监控库信息,修改并不会起作用。后面我们就想第二个会存放的地方,那就是赤兔的php配置文件
可见这里的密码还不是我们修改后的密码,我们接着找。
在初始化赤兔的时候如果有注意的话会发现除了创建了监控库还会创建一个配置库,默认库名为tdsqlpcloud,配置库中一般一会存储用户名和密码,虽然当前没有办法通过proxy登陆数据库,但还是能够通过root权限登陆数据库的,所以我们看一下配置库中的表信息。
可见这里的密码仍然不是我们修改后的密码,我们接着找。
其中authentication_string字段被password()函数进行了加密。
这个应该就是我们最后要找的密码,但是进行了加密,解密太过麻烦,所以我们尝试换一种思路,不去纠结现在的密码是什么,选择用一串已知的字符,使用此加密算法进行加密,之后替换user:tdsqlpcloud的authentication_string字段暴力改掉密码。经过试验,此方法依旧行不通,应该是修改密码操作改动的地方不只是这几个。
从底层直接修改的密码看来是不可行的,所以我们就想能不能够仿照管控重新下发修改密码操作,这样就能重新让管控走一遍密码修改的流程,接下来我们再试验一下。
登录任意一台机器的后台,只要能和OSS服务通信,执行如下命令:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "{"callee":"TDSQL","caller":"DES","eventId":101,"interface":{"interfaceName":"TDSQL.ResetPwd","para":{"groupid":"","host":"%","id":"set_id","pwd":"userpassword","user":"username"}},"password":"DES","timestamp":1435749309,"version":"1.0"}" 10.0.0.5:8080/tdsql
查看执行结果见到有"err_msg":"resetpwd ok","returnMsg":"ok",则继续下一步。
尝试刷新赤兔页面,如果访问不正常则是因为之前我们修改过赤兔的配置文件和配置库中的密码。所以我们要把密码恢复到一致。都修改一致后,我们重新尝试刷新赤兔页面,页面已恢复正常。
由此事可知,在使用tdsql过程中修改实例密码一定要牢记!!!一定要牢记!!
经过一番操作后,赤兔管理平台与监控库实例终于可以正常访问和使用了,希望上述的过程能够帮到各位。祝在读此文章的大牛们工作顺利,事事顺心。
文章来源:云贝学院