首先,給大家介紹一下TDSQL。TDSQL MySQL 版(TDSQL for MySQL)是騰訊打造的一款分散式資料庫產品,具備強一致高可用、全球部署架構、分散式水平擴充套件、高效能、企業級安全等特性,同時提供智慧 DBA、自動化運營、監控告警等配套設施,為客戶提供完整的分散式資料庫解決方案。(TDSQL(mysql版)產品詳細資訊https://cloud.tencent.com/product/dcdb/details)
相信有部分公司已經在使用或者試用過這款資料庫產品了,那麼在部署和使用中都或多或少的遇到一些問題,下面我先給各位介紹一下我遇到的這個問題。
一、問題:
眾所周知,TDSQL叢集會在一開始初始化時產出一個監控庫例項,正常情況下我們是不建議使用者去操作或者獨自操作監控庫這個例項的。但如果因為誤操作與不小心修改了監控庫的密碼,並且又沒有記住,下面這段應該能幫到你。
二、故障復現:
以下操作為我在自己的測試環境進行的問題復現。
1、修改監控庫密碼:
2、進入監控庫例項,檢視例項的訪問賬戶資訊:
3、對如上tdsqlpcloud賬號進行修改密碼操作:
4、在確認修改密碼之後,視窗立馬會出現php錯誤提示資訊:
隨後我們重新整理赤兔頁面,將會發現赤兔已經沒有辦法正常訪問了。
三、排查過程與問題解決:
1、接下來就是我們的排查思路,首先我們先看報錯,最上面提示我們username or password error就已經暴露出問題,證明這個問題是我們修改密碼導致的。而下面的Backtrace暴露給我們的則是赤兔頁面上的元件監控獲取的方式,同樣是去監控庫裡面取所需要的資料。
2、在部署的過程中我們已知有這麼幾個地方會存放監控庫的賬戶名密碼,第一是在安裝部署包的group_vars/all內,但這個只是初期錄入的監控庫資訊,修改並不會起作用。後面我們就想第二個會存放的地方,那就是赤兔的php配置檔案
可見這裡的密碼還不是我們修改後的密碼,我們接著找。
3、在初始化赤兔的時候如果有注意的話會發現除了建立了監控庫還會建立一個配置庫,預設庫名為tdsqlpcloud,配置庫中一般一會儲存使用者名稱和密碼,雖然當前沒有辦法通過proxy登陸資料庫,但還是能夠通過root許可權登陸資料庫的,所以我們看一下配置庫中的表資訊。
可見這裡的密碼仍然不是我們修改後的密碼,我們接著找。
其中authentication_string欄位被password()函式進行了加密。
這個應該就是我們最後要找的密碼,但是進行了加密,解密太過麻煩,所以我們嘗試換一種思路,不去糾結現在的密碼是什麼,選擇用一串已知的字元,使用此加密演算法進行加密,之後替換user:tdsqlpcloud的authentication_string欄位暴力改掉密碼。經過試驗,此方法依舊行不通,應該是修改密碼操作改動的地方不只是這幾個。
4、從底層直接修改的密碼看來是不可行的,所以我們就想能不能夠仿照管控重新下發修改密碼操作,這樣就能重新讓管控走一遍密碼修改的流程,接下來我們再試驗一下。
5、登入任意一臺機器的後臺,只要能和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
6、檢視執行結果見到有"err_msg":"resetpwd ok","returnMsg":"ok",則繼續下一步。
嘗試重新整理赤兔頁面,如果訪問不正常則是因為之前我們修改過赤兔的配置檔案和配置庫中的密碼。所以我們要把密碼恢復到一致。都修改一致後,我們重新嘗試重新整理赤兔頁面,頁面已恢復正常。
由此事可知,在使用tdsql過程中修改例項密碼一定要牢記!!!一定要牢記!!
經過一番操作後,赤兔管理平臺與監控庫例項終於可以正常訪問和使用了,希望上述的過程能夠幫到各位。祝在讀此文章的大牛們工作順利,事事順心。
文章來源:雲貝學院